- ベストアンサー
Excel 2007 マクロ 文字列の抽出について
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
以下のマクロの書きぶり全体で理解してください。 for each nextやwith end withについて理解していないと,offsetだけを見ていても理解は進みません。 for each h in worksheets("Sheet1").range("B2:B" & r) with worksheets("Sheet2").range("A65536").end(xlup).offset(1) .offset(0, 3) = h.offset(0, -1) .offset(0, 4) = h.offset(0, 1) end with next ご質問の直接の回答として >offset(行, 列) Offsetを使う練習: range("A1").offset(2,3) = 123 A1セルの,2列右で,3列下のセルに,123という値を記入する 復習: セル.offset(0, 3) セルの3列右で同じ行のセル セル.offset(0, 4) セルの4列右のセル セル.offset(0, -1) セルの1列左のセル セル.offset(0, 1) セルの1列右のセル セル.offset(1) セルの1行下のセル あるセル.offset(0, 3) = 別のセル.offset(0, -1) =>あるセルの3列右隣のセルに,別のセルの1列左隣のセルの値を入れる あるセル.offset(0,4) = 別のセル.offset(0, 1) =>あるセルの4列右隣のセルに,別のセルの1列右隣のセルの値を入れる
その他の回答 (2)
- keithin
- ベストアンサー率66% (5278/7941)
sub macro1() dim h as range dim r as long r = worksheets("Sheet1").range("B65536").end(xlup).row for each h in worksheets("Sheet1").range("B2:B" & r) with worksheets("Sheet2").range("A65536").end(xlup).offset(1) .resize(1, 3) = split(h, "-") .offset(0, 3) = h.offset(0, -1) .offset(0, 4) = h.offset(0, 1) .offset(0, 5).formular1c1 = "=IF(INT(RC2/100)=4,""国産"",IF(INT(RC2/100)=9,""外国産"",""""))" end with next end sub #ヤリタイ事のご説明と参照図に若干ミスマッチがあります #実際のデータの詳細が不明なので,アタマゼロなども保全するように番号を文字列で展開しています #マクロのご質問でも実は関数の方が良かったんですとかあとで言われる方も多いですね。
補足
ご回答ありがとうございました。 情報が足りないところがあり、大変申し訳ございませんでした。 希望したマクロの内容でございました。 Offsetプロパティについて、調べました。 ご紹介頂きましたOffsetプロパティの使い方が、Webサイトで 調べたのですが似通った情報がなく理解ができませんでした。 Offsetプロパティは「Rangeなどで指定した範囲からOffset(行, 列)で指定した先の部分を操作対象とする」 というプロパティであることは分かりました。 大変申し訳ありません。下記2つの箇所について どのような動きをしているのかお教え頂けませんでしょうか。 .Offset(0, 3) = h.Offset(0, -1) .Offset(0, 4) = h.Offset(0, 1)
- tom04
- ベストアンサー率49% (2537/5117)
こんばんは! VBAでないので参考にならなかったら無視してください。 関数による一例です。 データの「区切り位置」を使えば簡単に出来ると思いますが、 敢えて他の方法です。 ↓の画像でSheet2のA2セルに =IF(Sheet1!B2="","",LEFT(Sheet1!B2,5)) B2セルに =IF(A2="","",MID(Sheet1!B2,FIND("-",Sheet1!B2,1)+1,3)) C2セルに =IF(A2="","",RIGHT(Sheet1!B2,7)) D2セルに =IF(A2="","",Sheet1!A2) E2セルに =IF(A2="","",Sheet1!C2) F2セルに =IF(A2="","",IF(INT(B2/100)=4,"国産","外国産")) という数式を入れ、A2~F2セルを範囲指定し、F2セルのフィルハンドルで下へコピーすると 画像のような感じになります。 以上、参考になれば良いのですが 最初に書いたように希望の方法と違った場合は 読み流してくださいね。m(__)m
お礼
ご回答ありがとうございます。マクロ以外での解法も知りたいと思っていました。幅広く勉強したいと思います。
お礼
ご回答ありがとうございました。Offsetについて詳細に記載頂きまして非常に感謝しております。Offsetだけを見ていたため理解できていませんでした。どのセルを基点にして考えるのかが抜けていました。