ExcelマクロによるD列自動反映と文字列加工
以下のエクセル作業をマクロで行いたい D列にB列の内容を反映+特定の文字を追加し、表示させたい ①B列のセルに"北恵"が入っている時 ②D列に"北恵桧家 ○○様邸 先行配線写真"と表示させたい ③②の○○はB列の"名前:○○ ○○を反映させたいがスペースは削除して欲しい 例) 受番:4029B 名前:柴田 弘 顧客:北恵赤羽 住所:東京都八王子市 屋根:ガルバ(2世帯?) 15 3 施工:- 外壁:1/20→30.31 足場:1/27→2/5 備考:キー0833? 監督:熊倉090-9814-2432 工種:入線のみ◇ 受日:10/29 の場合、 北恵桧家 柴田弘様邸 先行配線写真 と表示したい。 B列はセル内で改行されている
承知いたしました!Excelの作業をマクロで自動化したいのですね。B列の内容を元に、D列に特定のフォーマットで表示させる、というご要望ですね。 例として挙げていただいた内容で、B列の「名前:柴田 弘」から「柴田弘」という部分を抽出し、スペースを削除してD列に反映させる、という部分がポイントになりそうです。 この処理をマクロで行う場合、以下のような手順で進めることができます。 B列の各セルをループ処理する: Excelのシート上にあるB列のセルを一つずつ順番に見ていきます。 「北恵」が含まれているか判定する: 現在見ているB列のセルに「北恵」という文字列が含まれているかを確認します。 「名前:」以降の文字列を抽出する: もし「北恵」が含まれていたら、そのセルの中から「名前:」という文字列を探し、その後の部分(例:「柴田 弘」)を抜き出します。 スペースを削除する: 抽出した文字列(例:「柴田 弘」)から、全角・半角のスペースをすべて削除します(例:「柴田弘」)。 D列に最終的な文字列を作成・表示する: 「北恵桧家 」 + (スペース削除後の名前) + 「様邸 先行配線写真」という形式で文字列を組み立て、D列の対応するセルに表示させます。 具体的に VBA (Visual Basic for Applications) でマクロを作成する場合、以下のようなコードが考えられます。 Sub FormatDColumn() Dim ws As Worksheet Dim lastRow As Long Dim i As Long Dim bCellValue As String Dim namePart As String Dim formattedName As String Dim targetString As String ' 作業対象のシートを指定します Set ws = ThisWorkbook.Sheets("Sheet1") ' "Sheet1" を実際のシート名に変更してください ' B列の最終行を取得します lastRow = ws.Cells(Rows.Count, "B").End(xlUp).Row ' B列の2行目から最終行までループ処理します(ヘッダー行がある場合を想定) For i = 2 To lastRow ' B列のセルの値を取得します bCellValue = ws.Cells(i, "B").Value ' B列のセルに "北恵" が含まれているかチェックします If InStr(bCellValue, "北恵") > 0 Then ' "名前:" の位置を探します Dim nameStartPos As Long nameStartPos = InStr(bCellValue, "名前:") ' "名前:" が見つかった場合 If nameStartPos > 0 Then ' "名前:" の次の文字から、行末までを抽出します namePart = Mid(bCellValue, nameStartPos + Len("名前:")) ' 改行コード(vbLf や vbCrLf)を削除し、スペースを削除します ' まず、改行コードを削除して一行にします namePart = Replace(namePart, vbLf, "") namePart = Replace(namePart, vbCrLf, "") ' 次に、全角スペースと半角スペースを削除します formattedName = Replace(namePart, " ", "") ' 全角スペース formattedName = Replace(formattedName, " ", "") ' 半角スペース ' D列に表示させる文字列を作成します targetString = "北恵桧家 " & formattedName & "様邸 先行配線写真" ' D列のセルに結果を表示します ws.Cells(i, "D").Value = targetString End If End If Next i MsgBox "D列の処理が完了しました!", vbInformation End Sub このマクロの使い方: Excelを開き、Alt + F11 キーを押してVBAエディターを開きます。 左側のプロジェクトウィンドウで、このExcelファイルの名前を右クリックし、「挿入」→「標準モジュール」を選択します。 表示されたコードウィンドウに、上記のコードをコピー&ペーストします。 コード内の Set ws = ThisWorkbook.Sheets("Sheet1") の "Sheet1" の部分を、実際に作業したいシートの名前に変更してください。 VBAエディターを閉じ、Excelに戻ります。 Alt + F8 キーを押してマクロダイアログを開き、「FormatDColumn」を選択して「実行」ボタンをクリックします。 補足: B列のセル内で改行されているとのことですが、VBAでは vbLf や vbCrLf といった改行コードで認識されます。上記のコードでは、これらの改行コードを削除してからスペースの削除を行っています。 もし「名前:」の後に他の文字列が続く場合(例:「名前:柴田 弘 (ニックネーム)」のような場合)、抽出する部分のロジックを調整する必要が出てくるかもしれません。今回は「名前:」の次から行末までを抽出して、そこからスペースを削除する、という形にしています。 このマクロは、B列に「北恵」が含まれている行のみ、D列に処理を行います。それ以外の行については、D列のセルはそのままになります。 このマクロで、ご希望の作業がスムーズに進むことを願っています!もし、さらに細かい調整が必要だったり、別のケースにも対応させたいというご要望があれば、遠慮なくおっしゃってくださいね。一緒に解決策を見つけましょう!😊