質問です。


A列
1_223
01_432
22_02

以上のような文字列で
1
1
22
の数字だけをB列に切り出し

C列  D列
1   北海道
22   岡山県
を参照して

E列にB列の答えを一度の作業で
表記できるエクセルのマクロまたは関数を教えてください。

E列
北海道
北海道
岡山県

回答の条件
  • 1人3回まで
  • 登録:
  • 終了:2011/04/28 18:02:23
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:taknt No.5

回答回数13539ベストアンサー獲得回数1198

ポイント40pt

マクロで作ってみました。

Sub main()
Dim b As Long
Dim e As Long

For b = 1 To Range("A1").End(xlDown).Row
    c = Cells(b, "A")
    If InStr(1, c, "_") > 0 Then
        d = Left(c, InStr(1, c, "_") - 1)
        d = Val(d)
        For e = 1 To Range("C1").End(xlDown).Row
            If Cells(e, "C") = d Then
                Cells(b, "E") = Cells(e, "D")
                Exit For
            End If
        Next e
    End If
Next b

End Sub

id:inosisi4141

ありがとうございます。

これで完璧です。

うまく行きました。

マクロでしたらB列は使わなくてよいのでしょうか?

2011/04/27 19:26:03

その他の回答4件)

id:SALINGER No.1

回答回数3454ベストアンサー獲得回数969

ポイント30pt

B1の数式を次のようにして下にコピー。

=VALUE(LEFT(A1,FIND("_",A1)-1))


E1の数式を次のようにして下にコピー。

=VLOOKUP(B1,C:D,2,FALSE)

id:inosisi4141

ありがとうございます。

B列の関数はA列にデータがあるのでデータの終わりまでB2でダブルクリックしてコピーできますが

E列はC列D列のデータが47行しかないためそこで終わってしまいます。

なにか一度にA列のデータの最後の位置までコピーする方法はありますか?

列の位置は変更になってもかまいません。

2011/04/27 17:55:28
id:readmaster No.2

回答回数74ベストアンサー獲得回数5

ポイント10pt

B列へは、

=VALUE(LEFT(A6,FIND("_",A6)-1))

おそらくA列のアンダーバーまで抜き出したものを

キーとして使っていると推測できるので、

あとは数値化します。


E列には、

=VLOOKUP($B6,$C$6:$D$7,2,FALSE)


VLOOKUP関数を使い、

Bをキーにして、C列D列のデータを検索し、D列の都道府県名を返します。

id:inosisi4141

ありがとうございます。

参考にさせていただきます。

2011/04/28 17:54:44
id:volvicn No.3

回答回数2ベストアンサー獲得回数0

ポイント10pt

以下の方法はいかがでしょうか?

1. B1 に

=VALUE(LEFTB(A1,FINDB("_",A1,1)-1))

を入れて、B3までコピー。

2. E1 に

=VLOOKUP(B1,$C$1:$D$2,2,TRUE)

を入れて、E3までコピー。

id:inosisi4141

ありがとうございます。

参考にさせていただきます。

2011/04/28 17:53:02
id:kia_44 No.4

回答回数396ベストアンサー獲得回数30

ポイント10pt

関数だけでも可能なので関数のほうでクリアしてみましょう。

今回はいらないですが、右側の文字列についても書いておきます。

使うのは、

  1. len関数 (指定した文字列が何文字あるかを表示します)
  2. find関数 (指定の文字が何番目にあるかを表示します)
  3. int関数 (小数点を切り捨て、数値にします)
  4. left関数/right関数 (文字列の一部だけ切り出す)
  5. vlookup関数です。 (表から指定のセルの値を取得する。説明が難しい…)

考え方

01_432がA1にあるとして考えます。

①文字列を分けたい。これはleft関数、right関数を使います。

=left(A1,2) ・・・・・これをαとします

=right(A1,3) ・・・・・これをβとします

でクリア。次はこれを関数で表現

②α、βをアンダーライン"‗"で分けたい。これはfind関数で"_"を見つけます。

=find("_",A1)とすると、3と出ます。leftでは2,rightでは3にする必要がある。

なので、

=left(A1,find("_",A1)-1)・・・・・これをχとします

=len(A1)で、7が取得できるのでこれを使う。

=right(A1,find("_",len(A1)-find("_",A1))・・・・・これをδとします

χは01、δは432と出力されました。

③次は、01を1にしましょう。これはint関数を使います。

χを以下のように書き換えます。int関数で包み込んだだけ。

=int(left(A1,find("_",A1)-1))

δも同様に

=int(right(A1,find("_",len(A1)-find("_",A1)))

数値になりましたよね?

以下、

χがB1にあるものとします。

リストは、C1からD5までとします。

④χを元にC列を参照し、D列の値を表示したい。

ここで=Vlookup関数を使います。

=vlookup(B1,C1:D5,2,FALSE)

④をもってクリアできていると思うのですがどうでしょうか。

何がわからないのかが分からない状態だったり、

何ができるのかわからない状態だとだとなかなか調べにくいですよね。

VBAを覚えるにしてもExcelの関数を一通り押さえておく必要がありますので、この回答にわからない関数があればぜひ調べてみてください。

とくにVlookup関数は頻度が高いものだと思いますので、ぜひ覚えちゃってください。

方向が違うだけのHlookup関数というものもありますよ。

id:inosisi4141

ありがとうございます。

参考にさせていただきます。

2011/04/28 17:53:49
id:taknt No.5

回答回数13539ベストアンサー獲得回数1198ここでベストアンサー

ポイント40pt

マクロで作ってみました。

Sub main()
Dim b As Long
Dim e As Long

For b = 1 To Range("A1").End(xlDown).Row
    c = Cells(b, "A")
    If InStr(1, c, "_") > 0 Then
        d = Left(c, InStr(1, c, "_") - 1)
        d = Val(d)
        For e = 1 To Range("C1").End(xlDown).Row
            If Cells(e, "C") = d Then
                Cells(b, "E") = Cells(e, "D")
                Exit For
            End If
        Next e
    End If
Next b

End Sub

id:inosisi4141

ありがとうございます。

これで完璧です。

うまく行きました。

マクロでしたらB列は使わなくてよいのでしょうか?

2011/04/27 19:26:03
  • id:SALINGER
    1 A列を選択して、E列に貼り付け。
    2 F1の数式を
    =VLOOKUP(B1,C:D,2,FALSE)
    3 F1の右下をダブルクリック
    4 E列を削除
  • id:kia_44
    コピーしたいセルをコピー
    A列でCTRL+↓を押すとデータがある最終セルに行きつくと思いますので
    そこから→を必要分押してCTRL+Shift+↑で範囲選択。そののちペーストでもいけますね。
  • id:taknt
    >マクロでしたらB列は使わなくてよいのでしょうか?

    B列は 見落としてました。失礼しました。

    関数でも B列にセットしなくても できます。

  • id:taknt
    今回の処理をするにあたってB列は 特に必要としません。
  • id:inosisi4141
    ありがとうございます。
    早速利用させていただきます。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません