1233754201 添付図のようなマクロが組みたいのですがうまくいきません。

お力を貸してください。

文字数が足りませんので、詳細はコメントに記載します。

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

ベストアンサー

id:airplant No.1

回答回数220ベストアンサー獲得回数49

ポイント100pt

何箇所か誤解されて作っているようなので、見直してみました。

  1. Sheet2の結果を書く行がmainブックのsheet1と同じ行になっている→sheet2のA列からIDで検索して、見つかったらそこへ文字をつなげていくように変更
  2. 【求人について】が毎回入っているので、最後にSheet2シートで入っている分を1回だけ見るように変更
'Option Explicit

Sub macro()

    Dim lastrow As Long
    Dim i As Long
    Dim j As Long   '@Add
    Dim wa As Worksheet
    Dim wb As String
    Dim kyuujinn As String
    Dim result As String
    Dim main As Range   'kyuujinのポインタ
    Dim Ans As Range    '@Add
    
    Workbooks.Open "C:\date\kyuujin.xls"
    Set wa = Workbooks("kyuujin.xls").Worksheets(1)
    
    lastrow = Sheet1.Cells(Rows.Count, 1).End(xlUp).Row
    j = 1   '@Add
    With Sheet2
        For i = 1 To lastrow
        
            '▼B列の値を設定する▼
            wb = ""
'@Del            kyuujinn = ""
'@Del            result = wb + kyuujinn
            
            'main.xlsのB列がある場合
            wb = wb & IIf(Sheet1.Range("B" & i).Value <> "", Sheet1.Range("B" & i).Value, "")
            'main.xlsのC列がある場合
            wb = wb & IIf(Sheet1.Range("C" & i).Value <> "", ":" & Sheet1.Range("C" & i).Value, "")
            'main.xlsのD列がある場合
            wb = wb & IIf(Sheet1.Range("D" & i).Value <> "", "(" & Sheet1.Range("D" & i).Value & ")", "")
'            '求人についてがあるとき
'            Set main = wa.Range("A:A").Find(Sheet1.Range("A" & i).Value)
'            If Not main Is Nothing Then
'                kyuujinn = vbNewLine & "【求人について】" & vbNewLine & _
'                main.Offset(0, 1).Value
'            End If
'
'            result = wb + kyuujinn
            
            Set Ans = .Range("A:A").Find(Sheet1.Range("A" & i).Value)   '@Add
            If Ans Is Nothing Then                                      '@Add
                '初めてのIDなら新規行にする
                .Range("A" & j).Value = Sheet1.Range("A" & i).Value '@Mod
                .Range("B" & j).Value = wb                          '@Mod
        '@Add Start
                j = j + 1
            Else
                ' 2つ目以降のIDなら既存行に文字をつなげる
                Ans.Offset(0, 1).Value = Ans.Offset(0, 1).Value & vbNewLine & wb    '@Mod
        '@Add End
            End If
        
        Next i
    
        For i = 1 To j - 1   '@Add
            Set main = wa.Range("A:A").Find(.Range("A" & i).Value)   '@Mod
            If Not main Is Nothing Then
                kyuujinn = vbNewLine & "【求人について】" & vbNewLine & _
                main.Offset(0, 1).Value
                .Range("B" & i).Value = .Range("B" & i).Value & kyuujinn
            End If
'@Del            result = wb + kyuujinn
        Next i  '@Add
        
    End With
    
    Workbooks("kyuujin.xls").Close
    
End Sub
id:Ryo0524

ありがとうございます。おかげで思っていたことが実行できました。

2009/02/05 21:21:04
  • id:Ryo0524
    Main.xls(シート1)
    ・A列・・・コード番号   ※重複あり
    ・B列・・・地域名
    ・C列・・・コメント
    ・D列・・・登録番号

    kyuujin.xls
    ・A列・・・コード番号
    ・B列・・・求人の有無

    出力(Main.xlsのシート2)
    ・A列・・・コード番号
    ・B列・・・Main.xlsのB列の値
        ※Main.xlsのA列のコードが同じものがあった場合はB列の値はひとつのセルにまとめる
        例)T00001 東京都足立区           東京都足立区(改行)
          T00001 東京都大田区    → T00001  東京都大田区(改行)
          T00001 東京都目黒区           東京都目黒区
        ※C列、D列についてはあれば表示

        kyuujinn.xlsのB列の値
        ※さらに、Main.xlsのA列の値とkyuujin.xlsの値が一致するときは
           【求人について】(改行)
            kyuujinn.xlsのB列の値
         というのを出力する
        例)A列     B列
              東京都足立区(改行)
         T00001  東京都大田区(改行)
              東京都目黒区(改行)
              【求人について】
               求人あり


    どうしても↓の処理ができません。
    >※Main.xlsのA列のコードが同じものがあった場合はB列の値はひとつのセルにまとめる
    >例)T00001 東京都足立区           東京都足立区(改行)
    >  T00001 東京都大田区    → T00001  東京都大田区(改行)
    >  T00001 東京都目黒区           東京都目黒区


    やろと思って挫折したコードです↓

    Sub macro()

    Dim lastrow As Long
    Dim i As Long
    Dim wa As Worksheet
    Dim wb As String
    Dim kyuujinn As String
    Dim result As String
    Dim main As Range

    Workbooks.Open "C:\date\kyuujin.xls"
    Set wa = Workbooks("kyuujin.xls").Worksheets(1)

    lastrow = Sheet1.Cells(Rows.Count, 1).End(xlUp).Row

    With Sheet2
    For i = 1 To lastrow

    '▼B列の値を設定する▼
    wb = ""
    kyuujinn = ""
    result = wb + kyuujinn

    'main.xlsのB列がある場合
    wb = wb & IIf(Sheet1.Range("B" & i).Value <> "", Sheet1.Range("B" & i).Value, "")
    'main.xlsのC列がある場合
    wb = wb & IIf(Sheet1.Range("C" & i).Value <> "", ":" & Sheet1.Range("C" & i).Value, "")
    'main.xlsのD列がある場合
    wb = wb & IIf(Sheet1.Range("D" & i).Value <> "", "(" & Sheet1.Range("D" & i).Value & ")", "")
    '求人についてがあるとき
    Set main = wa.Range("A:A").Find(Sheet1.Range("A" & i).Value)
    If Not main Is Nothing Then
    kyuujinn = vbNewLine & "【求人について】" & vbNewLine & _
    main.Offset(0, 1).Value
    End If

    result = wb + kyuujinn

    .Range("A" & i).Value = Sheet1.Range("A" & i).Value
    .Range("B" & i).Value = result

    Next i
    End With

    Workbooks("kyuujin.xls").Close

    End Sub

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

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

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

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