• 締切済み

指定した文字数分の文字列を抽出し、検索(VBA)

いつもお世話になっております。 指定した文字数分の文字列を抽出し、他のシートから抽出した文字列を検索して表示するのに セルBB2に =IF(AW2="",VLOOKUP(LEFT(N2,2),商品マスタ!$M$21:$N$67,2,0)) という数式を入れています。 セルBB2のみではなくBB列でずっと同じ処理をするため、マクロで処理しようと思うのですがなにぶん未熟でいい方法がわかりません。 Mid関数を使えばいいのかな、とは考えましたが、どう書けばいいのかわからず前にすすめません・・・・ どなたかご教授いただければ幸いです。

みんなの回答

  • classical
  • ベストアンサー率29% (14/47)
回答No.1

 ごめんなさい。  内容が詳しく分からなかったので、なんとなく回答してみます。  とりあえずMIDの使い方ですが、  MID("文字列", 開始位置, 文字数) と指定します。  たとえばA1セルの文字列が "あいうえお" だった場合  dim str as string  str = MID(Range("A1"), 2, 3)  とすると、str には文字列 "いうえ" が返ります。  ですが、もし   >セルBB2に =IF(AW2="",VLOOKUP(LEFT(N2,2),商品マスタ!$M$21:$N$67,2,0)) これでうまくいっているのであれば、  dim LastRow as long  LastRow = Cells(rows.count, 49).end(xlup).row '49=AW列 それの最終行を取得  Range("BB2").Select  Range("BB2:BB" & LastRow).FormulaR1C1 = _   "=IF(RC[-5]="",VLOOKUP(LEFT(RC[-40],2),商品マスタ!$M$21:$N$67,2,0)) としてみるのはどうでしょう?  検証してないので、うまくいくかは分かりません・・・  解説  前述の通り検証してないのでもしかしたら文法が間違えているところがあるかもしれませんが・・・  VBAでエクセルの関数を使うためには、(1) WorkseetFanction  数式を使うためには、(2) formula を使います。  この場合、変数に値を格納して云々というなら(1)を使うのでしょうが、 VLOOKUPを数式として扱うので、(2)でやってます。 (かなり大雑把な説明なので、細かく言うと違いますが・・・)  次に、R1C1 とは、相対参照です。  R は行。 C は列。  選択しているセルから、どの方向にどれだけ離れているか、 と考えると分かりやすいかと思います。  "BB2"から、行数(2)は変わらず、列数だけが変わっているので、 "AW"列は、"BB"列より -5 "N"列は"BB"列より -40 です。  そして最終行は、”AW"(=49列目)を参考に取得しています。  あとは、もともとあったIF~VLOOKUP文を、BB列にAW列の最終行まで記述しています。  うまく動かなかったらゴメンナサイ。

関連するQ&A

専門家に質問してみよう