[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『隣接セルの値が同じ時、一括して名前の定義』(たくと)
質問失礼いたします。
左隣のセルが同じ名前のものがある場合、または一つしかない場合に
一括して左隣のものを名前として名前の定義をしたいです。
説明が下手くそなのですが、具体的には
A B
1 東京 新宿 2 大阪 難波 3 兵庫 神戸 4 東京 原宿 5 大阪 梅田
上のような、データのとき
B1、B4に東京という名前の定義
B2、B5に大阪という名前の定義
B3に兵庫という名前の定義
ができるような機能またはマクロを書くことは可能でしょうか?
よろしくお願いいたします。
< 使用 Excel:Excel2010、使用 OS:Windows8 >
私の知る限りでは同一シート内に同一名称の名前は定義できないはずですよ? それが出来たら、エクセルが混乱しそう... (seiya) 2017/07/08(土) 18:39
(γ) 2017/07/08(土) 18:49
Sub test() Dim dic As Object Dim c As Range, s As String Dim k
Set dic = CreateObject("scripting.dictionary")
For Each c In Range("a1").CurrentRegion s = c.Value If Not dic.exists(s) Then Set dic(s) = c.Offset(, 1) Else Set dic(s) = Union(dic(s), c.Offset(, 1)) End If Next
For Each k In dic.keys dic(k).Name = k Next
End Sub
(マナ) 2017/07/08(土) 19:03
seiyaさま
コメントありがとうございます!
説明が下手で申し訳ありません。。
例えば、
名前 東京
参照範囲 B1,B4
という名前を新しく定義したいということです。
γさま
コメントありがとうございます!
したいイメージは例えばA商品の各地域の単価として
日本 東京 新宿区 西側 →100円/個
日本 東京 新宿区 北側 →50円/個
日本 東京 中央区 西側 →80円/個
日本 大阪 中央区 南側 →80円/個
米国 ハワイ ホノルル 西側 →60円/個
という樹形図のような元データがあったとして
1つ手前の選択肢ごとにグループ分け(名前の定義)をした上で
違うシートを集計用に設け
集計用セルにindirect関数とプルダウンリストで各項目行ごとにを紐付けしていって
(重複の度合いがわからないので2条件で特定できれば)dget関数もしくはindex関数を使って
各単価を出して行けるようにしたいと思っています
ただ、その中で元データは増えていく前提なので
自動で名前の参照範囲の更新等もしなければいけないし
データの打ち込みができれば誰でも使える形にしたいので
名前をリセットして定義し直す
というマクロを作ろうかと考えていたのですがどうでしょうか?
たくとさん、
失礼しました、私が問題を読み間違えました。 。 (seiya) 2017/07/08(土) 19:41
>For Each c In Range("a1").CurrentRegion ↓ For Each c In Range("a1").CurrentRegion.Resize(, 1)
(マナ) 2017/07/08(土) 20:17
マナさま
コメントありがとうございます!
実行してみたところ、エラー1004が出てきてしまったのですが
これは元データが悪いのでしょうか?
とりあえず、A列にひらがな1文字をランダムで入れてみたのですが駄目でした。。
デバックだと
dic(k).Name = k
の箇所に問題があるようなのですが。。
実行時エラー'1004'
入力した名前は正しくありません
以下の理由が考えられます
(たくと) 2017/07/08(土) 20:44
A B 1 東京 新宿 2 大阪 難波 3 兵庫 神戸 4 東京 原宿 5 大阪 梅田
(マナ) 2017/07/08(土) 21:25
(γ) 2017/07/08(土) 22:19
マナさん
コメントありがとうございます!
1行目から始まっていなかったのが問題だったようです。
勉強不足で申し訳ないのですが
指定の行(例えばA3)から始めるにはどの箇所を変える必要があるのでしょうか?
γさん
コメントありがとうございます!
今春から始めた仕事がエクセルを使う機会も多いのですが
基本、全部手打ちと簡単な関数のみで仕事を進めていくような感じなので
なんとか誰でもわかる操作法で職場の仕事量が減らないかなと思いまして。。
もともと、エクセルをほとんど使ってこなかったこともあり
勉強不足でお恥ずかしいのですが、γさんならどういった手法をとられますか?
よろしければ教えてください。
(たくと) 2017/07/09(日) 10:07
具体的にやりたいことをもっと詳しく書いたほうが
皆さんからのコメントもつくでしょう。
(γ) 2017/07/09(日) 10:12
Sub test2() Dim dic As Object Dim c As Range, s As String Dim k Dim p As Range
Set p = Range("A3")
Set dic = CreateObject("scripting.dictionary")
For Each c In Range(p, p.End(xlDown)) s = c.Value If Not dic.exists(s) Then Set dic(s) = c.Offset(, 1) Else Set dic(s) = Union(dic(s), c.Offset(, 1)) End If Next
For Each k In dic.keys dic(k).Name = k
Next
End Sub
(マナ) 2017/07/09(日) 10:38
>基本、全部手打ちと簡単な関数のみで仕事を進めていくような感じなので >なんとか誰でもわかる操作法で職場の仕事量が減らないかなと思いまして。。
入力をより簡単にして、ミスも少なくしたい。
ということなら、可変の名前定義をしてプルダウンリストを連動させることでできませんか? リストの構成に若干手を加えればできると思いますが?
http://www.excelist.net/faq/10.html
https://kokodane.com/2013_waza_076.htm
(seiya) 2017/07/09(日) 11:38
マナさん
参考にさしていただいて、なんとか形にすることができました!
ありがとうございました!
seiyaさん
そういった可変のドロップダウンリストを作るための名前の定義でした!
名前の参照範囲が飛び地だと無理みたいなので
リスト構成上、元データを結構いじる必要がありましたが、、
γさん
飛び地だとできなかったので、元データの方で修正をしました。
会社で工事依託を特定の数社にしていて、もちろん毎度見積もりを上げてもらっているのですが
同じ項目でも状況ごとの各単価の変動が大きいので
状況を簡素化してモデル化→自社としての各項目の標準単価を設定
という作業を行っております。
各状況の数字を全部拾えるわけではないので、数個の条件分岐によって各標準単価を出したのですが
他の社員でも、その標準単価にアクセスし集計できるようなシステムを作れればと考え、連動するドロップダウンによって各単価が参照されるのが一番簡単かなと思い、質問させて頂きました。
(たくと) 2017/07/11(火) 10:43
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.