dポイントプレゼントキャンペーン実施中!

条件付き書式だと、列が多すぎて大変な作業を、VBAでできたらいいなと思っております。
お知恵をお貸しくださいm(_ _)m

A列 田中 佐藤 吉田…
B列 100 200 300…
C列 10% 20% 30%…
D列 松田 田中 鈴木…
E列 500 200 400…
F列 50% 20% 40%…
……
列が横表記になってしまって見辛くて申し訳ないのですが、上記のような列がエクセルの列目一杯まであります。
これを、A列のセルが「田中」だったら、そのセルと隣のB,C列のセルを黄色にする、
更にその次のD,E,F列でも同じことをする、更にその次の3列も、、、
という作業をしたいのですが、どなたかご教示いただけますでしょうか。
条件付き書式で3列ごとに設定していましたが、列数が多すぎてめげました…
こちらで一発解決方法を教えていただけたら、とてもとても助かります。
よろしくお願い致します。

質問者からの補足コメント

  • 分かりづらくて申し訳ありません。
    エクセルVBAで作れるとありがたいです。
    また、データの前に見出しやら何やらが5行目まであり、実際のデータはF6セルから始まります。
    しかも、よく見たら、3列目と次の3列目の間に1列入ってる箇所もありました…
    例えば、全列を上から下に「田中」が入っているか探して、あったら該当のセルと、その隣のセル、更にその隣のセルの3セルを黄色にする、というVBAはできますでしょうか?
    「田中」のセルとその隣2セルの計3セルを黄色にするという条件は常に一緒です。
    また、使用タイミングは今回の一度きりですが、同じようなファイルがたくさんあって、全ふぁいに色付けが必要です。
    なので、ひとつVBAを組んでいただける大変助かると思い、質問させていただきました。
    いろいろ分かりづらい点が多くて申し訳ありません。
    どうぞよろしくお願い致します。

      補足日時:2021/02/22 17:59
  • うーん・・・

    tatsumaru77様、その通りでございます。
    F列以降の右側全列を検索、検索値は「田中」で決め打ちで大丈夫です。
    「田中」の列と隣の2列の全3列は必ず並んでいます。
    3列、3列、空白列、3列、、、
    みたいな感じで横にずっと連なっている状態です。
    ものすごい量で途方に暮れています…
    何卒よろしくお願い致します。

    No.6の回答に寄せられた補足コメントです。 補足日時:2021/02/22 19:18

A 回答 (13件中1~10件)

No8です。


すみません。No8のマクロは削除してください。
1~5行、A,B,C,D,E列も検索対象になっていました。

以下のマクロを標準モジュールに登録してください。
Option Explicit
Public Sub 田中検索()
Dim ws As Worksheet
Dim rg As Range
Dim maxrow As Long
Dim maxcol As Long
Dim wrow As Long
Dim wcol As Long
Application.ScreenUpdating = False
Set ws = ActiveSheet
Set rg = ws.Range("F6").CurrentRegion
maxrow = rg.Row + rg.Rows.Count - 1
maxcol = rg.Column + rg.Columns.Count - 1
For wrow = 6 To maxrow
For wcol = 6 To maxcol
If ws.Cells(wrow, wcol).Value = "田中" Then
ws.Cells(wrow, wcol).Interior.Color = 65535
ws.Cells(wrow, wcol + 1).Interior.Color = 65535
ws.Cells(wrow, wcol + 2).Interior.Color = 65535
End If
Next
Next
Application.ScreenUpdating = True
MsgBox ("完了")
End Sub
    • good
    • 0
この回答へのお礼

ご丁寧にありがとうございます。
おかげで長い長い作業があっという間に終わりそうです。
最初からずっと丁寧に教えてくださった回答者様をベストアンサーに選ばせていただきます。

お礼日時:2021/02/22 23:04

このような要件の場合、マニュアル操作とマクロのハイブリッドで考えると融通が利いて、便利なことが多いです。



具体的には・・・、今回の場合、下記のような手順になると思います。

①”田中”を検索して、ヒットしたものをすべて選択する。
②選択された全てのセルに対して、さらに右側2セル分を追加で選択する。
③選択されているセルに色を付ける。

上記①と③は、マニュアル操作で行っても手間はかかりません。手作業なので、検索範囲も変えられるし、”中村”だって検索できるし、赤や青の色も付けられます。
しかし、②は手作業では困難なので、ここだけマクロを組みます。
こんな感じです。

Sub sample()
Dim r As Range
For Each r In Selection
Union(Selection, r.Resize(, 3)).Select
Next r
End Sub
    • good
    • 1
この回答へのお礼

ありがとうございます。
マニュアル操作とVBAとどちらも使用する方法もあるのですね。
全てをVBAで記述しなくても、マニュアルでできるところはマニュアルで、とは考えつきませんでした。
できないくせに全てVBAで、、、なんて考えてました。
今後の参考にさせていただきます。
ありがとうございました。

お礼日時:2021/02/22 23:00

安全運転の為遅いです。



Sub megu()
Dim r As Range, st As String
Dim Findst As String

Findst = "田中" ' 探したい人

Set r = Range("F6", Cells(Rows.Count, Columns.Count)) _
.Find(What:=Findst, LookIn:=xlValues, LookAt:=xlWhole)

If Not r Is Nothing Then
st = r.Address
Do
r.Resize(, 3).Interior.Color = 65535
Set r = Range("F6", Cells(Rows.Count, Columns.Count)).FindNext(r)
Loop Until r.Address = st
End If

Set r = Nothing
End Sub
    • good
    • 0
この回答へのお礼

ありがとうございます。
こちらでも完璧に動きました!
Findという関数?があるのですね。
大変勉強になります。
素晴らしい回答をありがとうございました。

お礼日時:2021/02/22 22:57

No.7です。



No.9様
そのような事があったのですね。
私の経験ではなぜかVisualBasic(VBA)カテで見かけた事ならありましたので。
でも一体どっちが正解なんでしょう?(ExcelVBAの場合)
    • good
    • 0

GASカテゴリはないですから啓蒙する必要性もあります。


Excel(エクセル)カテで、BAを授与したこともありますし。
    • good
    • 0

以下のマクロを標準モジュールへ登録してください。



Option Explicit
Public Sub 田中検索()
Dim ws As Worksheet
Dim rg As Range
Dim r As Range
Set ws = ActiveSheet
Set rg = ws.Range("F6").CurrentRegion
For Each r In rg
If r.Value = "田中" Then
r.Interior.Color = 65535
r.Offset(0, 1).Interior.Color = 65535
r.Offset(0, 2).Interior.Color = 65535
End If
Next
End Sub
    • good
    • 0

Excelカテですからアプリは迷いませんでしたけど。


あとはベテラン様へ。
    • good
    • 0

No5です。


F列以降の右側前列

F列以降の右側全列
の誤りでした。失礼しました。
この回答への補足あり
    • good
    • 0

>実際のデータはF6セルから始まります。


>しかも、よく見たら、3列目と次の3列目の間に1列入ってる箇所もありました…

1.そうすると、検索する範囲は、
6行目以降の全行
F列以降の右側前列
(添付図のオレンジ色の範囲)
であってますか。

2.検索する名前は ”田中”で決め打ちでよろしいのですね。
「VBAで特定の文字を探して隣のセルに色を」の回答画像5
    • good
    • 0

1. Google ドライブ を開き[新規][Google スプレッドシート]を選択して「無題のスプレッドシート」を開く


2. Excelデータを[編集][特殊貼り付け][値のみ貼り付け]で、スプレッドシート上に再現する
3. [ツール][スクリプト エディタ]を選択して、「無題のプロジェクト」を開く
4. 先に入力されているスクリプトを削除して、以下のスクリプト貼り付ける
function myFunction() {
// スプレッドシートを取得する
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();// Container Bound Script
var sheet = spreadsheet.getSheets()[0];// シート数を指定して取得
sheet.clearFormats();
var lastRow = sheet.getLastRow();
// 3ブロック(A~I列)を処理する
for (var col=1; col <= 7; col=col+3) {
var table = sheet.getRange(1, col, lastRow, 3).getValues();
for (var i=0; i < table.length; i++) {
var row = i + 1;
if (table[i][0]=='田中') {
sheet.getRange(row, col, 1, 3).setBackground("#ffff00");//背景色:黄
}
}
}
}
5. [保存]ボタンを押下して、「myFunction」を選び、[▷ 実行]を押下する
「VBAで特定の文字を探して隣のセルに色を」の回答画像4
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A