エクセルVBA作成依頼


[1]auファイル(CSV。デスクトップ上にあるのみ)をエクセルで開くと
  B  D
2 16  ▲
3 28  ■
4 43  ★
・・100行程度続く

▲等記号は、大きいデータです。

[2]簡易シート(現在開いています)の内容は
  C  D  E  F  G   H
2
3    16
5    28     ◎
7    43     □  ▽
・・5万行くらい続く

[マクロ]
auのデータのD2の▲のデータを検索番号が一致する、簡易シートのE3に貼り付けたいのです。対応する行にはすでにデータが入っている時がありその際は右隣の空白に貼付ます⇒auファイルのD3の■のデータは簡易シートのG5に貼り付けたいです。D4のデータの★は簡易シートのH7に貼付ます。
auシートの行が終わるまで繰り返します。

auの検索番号(B列の番号)が、簡易シートにないときがあります。その際は、「20行失敗。」など表示されると嬉しいです。

よろしくお願いします。

回答の条件
  • 1人2回まで
  • 登録:2008/05/03 11:56:44
  • 終了:2008/05/03 15:39:50

ベストアンサー

id:SALINGER No.1

SALINGER回答回数3454ベストアンサー獲得回数9692008/05/03 13:38:19

ポイント60pt

仕様にわからないところがあったのでこれでいいか不安ですが作ってみました。

簡易シートのD列は一意なのか、重複してたら全てにいれるのかなど。

検索した行に記号が入っていないとき(16、▲の場合など)はE列に記号をいれるということならば、

簡易シートの方のモジュールに次のコードをコピペしてみてください。

Sub Macro()
    Dim wc As Worksheet
    Dim r As Long
    Dim r2 As Long
    Dim obj As Object
    Dim i As Long
    
    Application.ScreenUpdating = False

    'auファイルをau.csv、エクセルで開いたときのシートをauにしています    
    Set wc = Workbooks("au.csv").Worksheets("au")
    
    r = 2
    While wc.Cells(r, 2).Value <> ""
        Set obj = Range("D:D").Find(wc.Cells(r, 2).Value)
        If obj Is Nothing Then
            MsgBox r & "行失敗。"
        Else
            r2 = obj.Row
            For i = Columns.Count - 1 To 4 Step -1
                If Cells(r2, i).Value <> "" Then
                    Cells(r2, i + 1).Value = wc.Cells(r, 4).Value
                    Exit For
                End If
            Next i
        End If
        r = r + 1
    Wend
    
    Set obj = Nothing
    Set wc = Nothing
    
    Application.ScreenUpdating = True
End Sub

auファイルと簡易シートのあるブックをExcelで開いた状態でコードを実行してください。


注意、auファイルのB列の検索文字に空白が出るまで処理を繰り返すようになっています。

B列に途中空白があると途中で止まります。

id:naranara19

文字制限で詳しくかけませんでした。依頼の文にもなっていなくてすみませんでした。

ご回答ありがとうございます。

早速やってみましたが、

ありがとうございます!Set WCでつまってしまいました。インデックスが有効範囲にありません。とエラーがでてしまいました。

一応auファイルを開いてやっているのですが・・。auファイルのシート名もauになります。


簡易シートのD列は一意なのか、重複してたら全てにいれるのかなど。

★簡易シートのD列の数字はすべて異なっております。auの方は重複しているケースがあります。

検索した行に記号が入っていないとき(16、▲の場合など)はE列に記号をいれるということならば、

★はい、その通りです。検索した行の該当するE列にデータが入っていないときがあります。

 ただ、記号をいれるのではなく、記号はあくまでも説明しやすくするためにしているので、

 本来は大きいデータになります。(HTMLの入ったデータ)

お手数をおかけしますが、よろしくお願いいたします。

2008/05/03 14:16:25
  • id:SALINGER
    たぶん、拡張子が表示していないかな。
    それならばコード中のau.csv→auに。
  • id:naranara19
    SALINGERさんへ

    完璧に動きました!!!!

    大変素早いご回答に感謝いたします!!

    コードも短くて嬉しいです。

    今後も困ったときにはぜひお願いいたします。

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

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

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

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

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません