質問です。前回の質問を一つにまとめました。

エクセルのマクロまたは関数でお願いします。

Sheet2に参照をおきます。
A列  B列
1   青森
2   岩手
3   秋田

C列  D列
1  docomo
2  ezweb
3  softbank

データと答えはSheet1に出します。
A列(データ)   B列   C列(答え)
3_01       3    秋田
2_02       2    岩手
1_01       1    青森

上記の参照はSheet2のA列B列です。

データと答えはSheet1に出します。
D列(データ)   E列(データ)    F列(答え)
aaaa       3        aaaa@softbank
bbbb       1        bbbb@docomo
cccc       2        cccc@ezweb

上記の参照はSheet2のC列D列です。


上記の1行目はいずれも項目行です。
データおよび答えは2行目からにお願いします。

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

ベストアンサー

id:taknt No.2

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

ポイント30pt
Sub main()
Dim a As Long
Dim b As Long

s1 = "Sheet1"
s2 = "Sheet2"

For a = 2 To Sheets(s1).Range("A2").End(xlDown).Row
    c = Sheets(s1).Cells(a, "A")
    If InStr(1, c, "_") > 0 Then
        d = Left(c, InStr(1, c, "_") - 1)
        d = Val(d)
        For b = 2 To Sheets(s2).Range("A2").End(xlDown).Row
            If Sheets(s2).Cells(b, "A") = d Then
                Sheets(s1).Cells(a, "C") = Sheets(s2).Cells(b, "B")
                Exit For
            End If
        Next b
    End If
    
    d = Sheets(s1).Cells(a, "E")
    For b = 2 To Sheets(s2).Range("C2").End(xlDown).Row
        If Sheets(s2).Cells(b, "C") = d Then
            Sheets(s1).Cells(a, "F") = Sheets(s1).Cells(a, "D") & "@" & Sheets(s2).Cells(b, "D")
            Exit For
        End If
    Next b
Next a

End Sub

id:inosisi4141

ありがとうございました。

D列データを文字列にしてからやるのが良いですね。

途中でエラーに引っかからないように準備が必要でした。

でも上手くゆきましたありがとうございました。

関数でやるより時間がかかるみたいですが後処理が無い分

結果的に早く作業が終わるみたいです。

2011/04/30 13:59:45

その他の回答1件)

id:Silvanus No.1

回答回数180ベストアンサー獲得回数71

ポイント40pt

下記URLにエクセルワークブックを置きました。

http://rct3jp.info/hatena/hatena_inosisi4141_110429.xls

恐らく、こんな感じで宜しいのではないかと思いますが、いかがでしょうか。

id:inosisi4141

早速ありがとうございます。

下記の答え以外はOKです。

質問の説明が不足していました。

Sheet1の

B列の数字はA列の_の前の数字の部分を抜きだしたものです。

A列の数字1文字または2文字を抜き出して直接参照より答えをC列に

出しても

B列に一旦だしてそれを参照と照合してCの答えにしてもOKです。

Sheet1

A列(データ)   B列   C列(答え)

3_01       3    秋田

2_02       2    岩手

1_01       1    青森

11_01      11    群馬

上記はA列の_から前の数字を抜き出してB列に表示する関数があればOKです。

よろしくお願いします。

2011/04/29 13:24:58
id:taknt No.2

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

ポイント30pt
Sub main()
Dim a As Long
Dim b As Long

s1 = "Sheet1"
s2 = "Sheet2"

For a = 2 To Sheets(s1).Range("A2").End(xlDown).Row
    c = Sheets(s1).Cells(a, "A")
    If InStr(1, c, "_") > 0 Then
        d = Left(c, InStr(1, c, "_") - 1)
        d = Val(d)
        For b = 2 To Sheets(s2).Range("A2").End(xlDown).Row
            If Sheets(s2).Cells(b, "A") = d Then
                Sheets(s1).Cells(a, "C") = Sheets(s2).Cells(b, "B")
                Exit For
            End If
        Next b
    End If
    
    d = Sheets(s1).Cells(a, "E")
    For b = 2 To Sheets(s2).Range("C2").End(xlDown).Row
        If Sheets(s2).Cells(b, "C") = d Then
            Sheets(s1).Cells(a, "F") = Sheets(s1).Cells(a, "D") & "@" & Sheets(s2).Cells(b, "D")
            Exit For
        End If
    Next b
Next a

End Sub

id:inosisi4141

ありがとうございました。

D列データを文字列にしてからやるのが良いですね。

途中でエラーに引っかからないように準備が必要でした。

でも上手くゆきましたありがとうございました。

関数でやるより時間がかかるみたいですが後処理が無い分

結果的に早く作業が終わるみたいです。

2011/04/30 13:59:45
  • id:Silvanus
    これで処理出来ているかと思います。
    http://rct3jp.info/hatena/hatena_inosisi4141_110429b.xls
  • id:inosisi4141
    http://rct3jp.info/hatena/hatena_inosisi4141_110429b.xls

    ありがとうございます。
    今回はURLが開かないので確認できないのですが
  • id:Silvanus
    あれれ?、何故でしょう…。
    もう一度ファイルを置き直したのでご確認下さい。こちらからは読めてます。
  • id:Silvanus
    もしダメな様でしたら、B2セルへ以下の内容を入力して下さい。
    「=VALUE(LEFT($A2,SEARCH("_",$A2,1)-1))」
    B2より下方のセルについては、そのB2セルをコピペして下さい。
  • id:inosisi4141
    ありがとうございました。
    ファイルが開いて読めました。
    B列も上手く行きました。
    これでOKです。
    早速使わせていただきます。
  • id:Silvanus
    良かったです!…でも何でファイルが読めなかったのか…不思議です。ではでは。

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

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

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

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