絞り込み条件:
子カテゴリ: 特徴量抽出
広告[Advertisement]
13

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列のセルはそのままになります。 このマクロで、ご希望の作業がスムーズに進むことを願っています!もし、さらに細かい調整が必要だったり、別のケースにも対応させたいというご要望があれば、遠慮なくおっしゃってくださいね。一緒に解決策を見つけましょう!😊

3

ExcelマクロによるB列情報抽出とC列反映

以下のエクセル作業をマクロで行いたい ①C列に1列追加 ②B列のセルに入っている文字から特定の文字を抽出して追加したC列のセルに反映させる 例) 受番:4029B 名前:柴田 弘 顧客:ヤマダ  住所:東京都八王子市 屋根:ガルバ(2世帯?) 15 3 施工:- 外壁:1/20→30.31 足場:1/27→2/5 備考:キー0833? 監督:熊倉090-9814-2432 工種:入線のみ◇ 受日:10/29 の場合、 名前:柴田 弘 顧客:ヤマダ 監督:熊倉090-9814-2432 と表示したい。 B列はセル内で改行されている

承知いたしました。Excelの作業をマクロで自動化したいのですね!B列のセル内で改行されている情報を元に、特定の文字を抽出して新しいC列に反映させる、というご要望ですね。一緒に考えていきましょう!😊 まず、いただいた例を元に、B列のセルから「名前」「顧客」「監督」の情報を抽出し、C列に表示させるためのVBAコードを作成してみましょう。 VBAコードの例 Sub ExtractInfoToColumnC() Dim ws As Worksheet Dim lastRow As Long Dim i As Long Dim bColumnValue As String Dim cColumnValue As String Dim lines() As String Dim name As String Dim customer As String Dim supervisor As String ' 作業対象のシートを設定します Set ws = ThisWorkbook.Sheets("Sheet1") ' "Sheet1" は実際のシート名に変更してください ' B列の最終行を取得します lastRow = ws.Cells(Rows.Count, "B").End(xlUp).Row ' C列にヘッダーを追加します(必要であれば) ws.Cells(1, "C").Value = "抽出情報" ' ヘッダー名も必要に応じて変更してください ' B列の各セルをループ処理します For i = 2 To lastRow ' 2行目から開始(ヘッダー行を除く場合) bColumnValue = ws.Cells(i, "B").Value ' セル内の改行で分割して配列に格納します lines = Split(bColumnValue, vbLf) ' vbLf は改行コードです ' 各行をチェックして情報を抽出します name = "" customer = "" supervisor = "" For Each line In lines ' 名前を抽出("名前:"で始まる行) If InStr(line, "名前:") > 0 Then name = Trim(Replace(line, "名前:", "")) End If ' 顧客を抽出("顧客:"で始まる行) If InStr(line, "顧客:") > 0 Then customer = Trim(Replace(line, "顧客:", "")) End If ' 監督を抽出("監督:"で始まる行) If InStr(line, "監督:") > 0 Then supervisor = Trim(Replace(line, "監督:", "")) End If Next line ' 抽出した情報を結合してC列に反映します cColumnValue = "" If name <> "" Then cColumnValue = cColumnValue & "名前:" & name & vbLf End If If customer <> "" Then cColumnValue = cColumnValue & "顧客:" & customer & vbLf End If If supervisor <> "" Then cColumnValue = cColumnValue & "監督:" & supervisor & vbLf End If ' 末尾の改行コードを削除します(もしあれば) If Right(cColumnValue, 1) = vbLf Then cColumnValue = Left(cColumnValue, Len(cColumnValue) - 1) End If ' C列に結果を書き込みます ws.Cells(i, "C").Value = cColumnValue Next i MsgBox "抽出作業が完了しました!", vbInformation End Sub このコードのポイント Dim宣言: 変数を宣言して、メモリを確保します。 Set ws = ThisWorkbook.Sheets("Sheet1"): マクロを実行するExcelブック内の、どのシートを対象にするかを指定します。"Sheet1"の部分は、実際のシート名に合わせて変更してくださいね。 lastRow = ws.Cells(Rows.Count, "B").End(xlUp).Row: B列のデータが入っている最後の行番号を取得します。これにより、データ量が変わっても自動的に対応できます。 Split(bColumnValue, vbLf): B列のセルに入っている文字列を、改行コード(vbLf)で区切って、配列linesに格納します。これで、各行の情報を個別に扱うことができます。 InStr(line, "名前:") > 0: 各行に「名前:」という文字列が含まれているかを確認します。 Trim(Replace(line, "名前:", "")): もし「名前:」が含まれていたら、その部分を取り除き、前後の余分なスペースを削除して、名前の部分だけを抽出します。 cColumnValue = cColumnValue & "名前:" & name & vbLf: 抽出した情報を、新しいC列用の文字列として組み立てていきます。改行を挟んで、見やすくしています。 ws.Cells(i, "C").Value = cColumnValue: 組み立てた文字列を、対応する行のC列に書き込みます。 MsgBox "抽出作業が完了しました!": 処理が終わったことを知らせるメッセージを表示します。 マクロの実行方法 Excelを開き、Alt + F11 キーを押してVBAエディターを開きます。 メニューバーの「挿入」から「標準モジュール」を選択します。 表示されたコードウィンドウに、上記のVBAコードをコピー&ペーストします。 Excelシートに戻り、Alt + F8 キーを押してマクロダイアログボックスを表示します。 作成したマクロ名(ExtractInfoToColumnC)を選択し、「実行」ボタンをクリックします。 もし、抽出したい情報がもっと増えたり、条件が変わったりする場合でも、このコードをベースに調整できますよ! 例えば、 「住所」も抽出したい場合 → If InStr(line, "住所:") > 0 Then ... のような行を追加します。 抽出する順番を変えたい場合 → cColumnValue を組み立てる部分の順番を入れ替えます。 どうでしょうか?もし、このコードでうまくいかない点や、さらに「こんなこともしたい!」というご要望があれば、遠慮なく教えてくださいね!一緒に、もっと便利で快適なExcel作業を目指しましょう!✨