人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

質問です。

A列
1_223
01_432
22_02

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

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

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

E列
北海道
北海道
岡山県

●質問者: inosisi
●カテゴリ:コンピュータ インターネット
✍キーワード:エクセル マクロ 北海道 岡山県 数字
○ 状態 :終了
└ 回答数 : 5/5件

▽最新の回答へ

1 ● SALINGER
●30ポイント

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

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


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

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

◎質問者からの返答

ありがとうございます。

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

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

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

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


2 ● readmaster
●10ポイント

B列へは、

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

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

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

あとは数値化します。


E列には、

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


VLOOKUP関数を使い、

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

◎質問者からの返答

ありがとうございます。

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


3 ● volvicn
●10ポイント

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

1. B1 に

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

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

2. E1 に

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

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

◎質問者からの返答

ありがとうございます。

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


4 ● きあ
●10ポイント

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

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

使うのは、

  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関数というものもありますよ。

◎質問者からの返答

ありがとうございます。

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


5 ● きゃづみぃ
●40ポイント ベストアンサー

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

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

◎質問者からの返答

ありがとうございます。

これで完璧です。

うまく行きました。

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ