• ベストアンサー

VBA 地名を抽出し、セルごとに分ける

Gセルに名前、地名が並んでいます。 地名を超出し、分けるようにAセルからFセルまで並べます。 イメージ画像のようにしたいです。 VBAはどのようにしたら良いでしょうか? 宜しくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • kkkkkm
  • ベストアンサー率65% (1639/2487)
回答No.2

たとえば地名の範囲はA1:F1として「(」は半角だとした場合です。 また、地名の範囲がA列から始まらない場合mOffsetの0を右に移動した数にしてください A列からではなくB列から始まった場合B1:G1と変更した場合 1列右に寄ったので mOffset = 1 Sub Test() Dim i As Long, mCol As Variant, mOffset As Variant Dim FStr As String, tmp As String mOffset = 0 For i = 2 To Cells(Rows.Count, "G").End(xlUp).Row If Cells(i, "G").Value <> "" Then tmp = Split(Cells(i, "G"), "(")(1) FStr = Left(tmp, Len(tmp) - 1) mCol = Application.Match(FStr, Range("A1:F1"), 0) If IsError(mCol) Then MsgBox "地名が存在しません。 " & Cells(i, "G").Value, vbInformation Else Cells(Cells(Rows.Count, mCol + mOffset).End(xlUp).Row + 1, mCol + mOffset).Value = Cells(i, "G").Value End If End If Next End Sub

nkmyr
質問者

お礼

コメントありがとうございます。 バッチリです。ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

第1行に、地名はすでにセットされているとする。(A-F列第1行) ーー 標準モジュールに Sub test01() lr = Range("G100000").End(xlUp).Row MsgBox lr For i = 2 To lr x = Cells(i, "G") y = Split(x, "(") '(は、全角であるとする Z = Replace(y(1), ")", "") 'MsgBox Z c = Range("a1:F1").Find(what:=Z).Column 'MsgBox c r = Cells(100000, c).End(xlUp).Row Cells(r + 1, c) = y(0) Next i End Sub 実行 ーー 質問のデータで 結果(列位置は崩れていると思うが、実際のテスト結果を見てください) 仙台 宮城 福島  千葉  茨城  東京  神奈川 山田太郎  高橋花子  鈴木太郎 高橋太郎  楠太郎 斎藤太郎 橘花子   佐藤花子 Msgbox行は、データが少数のテストの場合には、生かしてください。 FindはMatch関数でもできそう。エクセル関数好きの者にはよいかも。 c = Application.WorksheetFunction.Match(Z, Range("A1:F1"), 0) 本題はEnd(xlUp).の応用だけ、といった感じか? あと、カッコ内の文字をどう抜き出すか。 初心者なら、上記のようにやらずとも、1文字ずつ「(」や「)」かどうか(IF文で)見て行けば仕舞だろう。

nkmyr
質問者

お礼

コメントありがとうございます。 動作は良かったですが、(地位名)が削除してしまうことは残念でした。

全文を見る
すると、全ての回答が全文表示されます。
  • linerjp
  • ベストアンサー率45% (5/11)
回答No.1

ソースコードにしないでプロセスだけ明示しますので、ソース自体はご自身で考えてください。 (1)G2セルから読み出して仮の変数Aへ。 (2)変数における"("の位置を確認させる。 (3)変数における")"の位置を確認させる。 (4)(2)の位置から(3)の位置までの文字を仮の変数Aから抜き出して別の変数Bに納める。 (5)A1セルからF1セルまで順番に、Bと合致するかどうか調べる。 (6)合致したら当該列の空行を探し、見つかった座標に仮の変数Aを代入する。 (7)G3セルを読み出しするようターゲットを変更する→(1)1へ戻る。空白に当たったら終了する。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • VBA 地名を抽出し、セルごとに分ける3

    https://okwave.jp/qa/q9700177.html 上記は地名を抽出し、「抽出」シートのA2から分けるように並べるといったマクロを実行しています。 A列  B列  C列  D列  E列 地名  空白  地名  空白  地名 といった一つの列を飛ばして並べたいです。 下記がイメージ画像です。 宜しくお願いします。

  • VBAで、結合したセルの位置を変えたい

    エクセル2007のVBAですが、たとえば結合したセルG11があります。 このセルに、マクロ実行時に値を渡してセルの場所を変えることはできますか? たとえば(横の値,縦の値)とし、(1,0)という値を渡すとセルの位置はH11となり、 (0,1)という値を渡すとG12となる。 (-1,0)ならF11、といった感じです。 可能でしょうか?よろしくお願いします。

  • VBAで重複データは最後のみ反映し並び替え

    下記の様にE,F,G,H,I,J,K,L,M,Nに文字(主に地名)を入力した後VBAで横に検索していきA列に重複は最後の文字を抽出し縦に並べて行きたいのですがご教授頂けませんでしょうか。 説明が難しいのですがE5から横に検索し重複する文字は最後のみ反映し空白のセルは反映させずA1上から詰めて転記するイメージとなります。度々入力値が変更される事もあるので実行ボタンを設置してVBAで処理出来たら助かります。どうぞ宜しくお願い致します。(下記イメージです) E  F G H  I  J  K  L  M  N 111 111 222 111 333 111    222 222 111 111 222 444 333 666 555 333 777 444 999 222 333 888 888 666   999 333 333 666 555 666 666 666 ⇓ A 111 777 444 222 888 999 333 555 666

  • 【VBA】特定の条件でセルをコピー

    VBA初心者です 特定の条件を満たすセルの隣接する指定のセルをコピーして別のシートへ貼付けたいです 【sheet1】 A   B   C   ~   F  G 1   2   あ   ~   3  あり 2   1   い   ~   7  なし 3   2   う   ~   4  あり 5   3   え   ~   6  あり 6   2   お   ~   5  なし 7   1   か   ~   3  あり 8   3   き   ~   7  なし 9   2   く    ~  8  なし といったデータのうち、G列が「あり」の行の C~Fの値を別のシートへ以下のように貼り付けたいです 【sheet2】 A   ~   D  E あ   ~   3  _ う   ~   4  _ え   ~   6  _ か   ~   3  _ 全くの初心者です よろしくお願いします

  • VBAについて

    VBA初心者です。 ダブルクリックをしたセルの、右隣セル3つに入っている値を、A1・B1・C1に反映させるVBAを教えて下さい。 例/F1でダブルクリックをしたら、G1とH1とI1の値をA1とB1とC1に反映させる。 ※ダブルクリックをするセルF列のどれかで、反映させる先のセルはA1とB1とC1です。 初心者の為、質問内容が分かりにくいかもしれませんが、ご回答頂けると幸いです。

  • VBA Offsetで可視セルだけを移動

    VBA Offsetで可視セルだけを移動 エクセル2016のマクロで、現在アクティブのセルから3マス左に移動させたいです。 以下ですと、今いるG1セルからA1セルに移動したいです。 / A B C D E F G 1 表示 表示 非表示 表示 非表示 非表示 今いるセル 分かりづらい質問で申し訳ありません。。 質問の趣旨をおわかりいただけるでしょうか? 方法等調べましたがほしい情報が見当たらず、お知恵をお貸しください。 よろしくお願いいたします。

  • エクセルVBAで複数のセル入力からそれぞれの画像を指定したセルに貼り付け

    複数のセル入力時のたびに自動実行されるイベントマクロを使い、それぞれの入力値と同じ画像を決まったセルに貼り付けようとするVBAをつくろうとしています。 画像サイズ加工(サイズ調整、トリミング)は同じものとします。 更に、画像がないセルに関しては、画像が挿入されるそれぞれのセルに ”画像登録がありません”と表示される。 入力セル=B3:B10 画像挿入セル=F2,F9,F16,F23,F30,F37,F44,F51 できれば、勉強の為に’コメント説明付のご回答をお願いします。

  • アクティブセルの行のセルを複数指定選択-VBA

    アクティブセルの行のセルを複数指定選択-VBA コマンドボタンを押すとアクティブセルのある行のセルを個別に選択したいのですが、どのようにVBAにコードを入力すればいいのか悩んでいます。 例:選択したい列(セル)A:C,F:I アクティブセルがA2にある時、コマンドボタンを押してA2,B2,C2,F2,G2,H2,I2を選択する。   アクティブセルがA10にある時は、A10,B10,C10,F10,G10,H10,I10を選択する。 ご回答お待ちしています。宜しくお願い致します。

  • VBAで連続した複数セルの値の調べかた

    エクセルVBAでA1セルからF1セルまでの6せるのそれぞれの値を1つの値として取得できる方法はありませんか? LOOP処理とかで1セルごと処理して取得するとかでなく 関数とかRANGE(”A1:F1”)のプロパティとかで何か無いでしょうか 宜しくお願いします。

  • VBA  セルの色づけ

    Excel知識が乏しく、質問させていただきます。 まったくの初心者です… セルのA5~A30までの セルごとにそれぞれ色をつけます。 色は、無色または赤です。 セルA5に赤色をつけたときには、同一シート内のセルC10からC13とD10からD12までセルA5と同じ色になるように。 A5が、無色のときには上記同一セルも無色にするようなイメージです。 同様にA6が赤色の時に、E3~E7、F3~F6に赤色がつく。 そんな設定ができるようにするマクロが必要です。 日々変わる色設定を手作業で行うのが困難になってきました…。 方法についで教えていただきたいです。

このQ&Aのポイント
  • トナーを交換した後に、プリントができなくなるというトラブルが発生しています。
  • お使いの環境はWindows10で、接続は有線LANです。関連するソフト・アプリは特にありません。
  • 問題の製品はブラザー製品のMFC-L2720DNです。トナー交換後に表示が消えず、プリントができなくなりました。
回答を見る

専門家に質問してみよう