vbaをネットで検索しながら作成しているのですが、うまくいかず困っています。
お助けいただけたら嬉しいです。
必要な項目としては
①コード A列5行目~A列135行目までです。
②NO C列5行目~AZ列135行目までです。
③検索key BF列5行目~BF列135行目までです。
すべて1つのシート内での作業です。
やりたいこととしては
”BF1”セルとBF列の「検索key]が一致して、且つ色が塗りつぶされていない(vbWhite )セルをランダムに検索したいです。
”BF2”セルが1の場合はセル1つを検索し、”BF2”セルが2の場合はセル2つを検索したいです。
2の場合は、半角コンマで2つの値をつなぎます。また、2の場合はセルは同じ行で連続しているセル
のみが対象です。
”C2”→検索された値と同じ行のA列の値
”I2”→検索された値(数字)。例:C5セルなら「01」。
検索された値が2つの場合は、半角カンマでつなげる。
”AU2”→検索された値の行番号
”AW2”→検索された値の列番号のひとつめ
”AY2”→検索された値の列番号のふたつめ
添付画像は、画像の尺があるので一部を非表示にしてあります。
よろしくお願いします。
No.4
- 回答日時:
I2は事前に書式を表と同じにしてあるのが条件。
ただ『前・後』については思い浮かびませんでしたが・・・・
1個の場合は問題ないのですが2個ですと2個ずつでしかリストアップしてないので、前後が単独の場合飛ばされてしまうのです~。
取り敢えず出来た範囲が(もうコードメチャクチャに見えるかも)。
Private myArr As Object
Private rs As Range
Private n As Integer
Sub megu() '★ メイン
Dim rf As Range, ra As Range
Dim i As Integer, v As Variant
Randomize
Set myArr = CreateObject("System.Collections.ArrayList")
Set ra = Range("BF5:BF10") '★ 検証用で範囲を縮めてます
Range("C2:O2").ClearContents '★ 事前に書き込みセルを空白に
Range("AU2:AZ2").ClearContents '★ 事前に書き込みセルを空白に
If Range("BF1").Value <> "" Then
Set rf = ra.Find(What:=Range("BF1").Value)
If Not rf Is Nothing Then
Select Case Range("BF2").Value
Case 1
Call Search_1(rf)
Range("I2").Value = rs.Value
Range("AW2").Value = rs.Column
Case 2
Call Search_2(rf)
Range("I2").Value = Join(WorksheetFunction.Index(rs.Value, 1, 0), ",")
v = Split(rs.Address, ":")
Range("AW2").Value = Range(v(0)).Column
Range("AY2").Value = Range(v(1)).Column
End Select
Range("C2").Value = Range("A" & rs.Row).Value
Range("AU2").Value = rs.Row
End If
End If
Set myArr = Nothing
Set rf = Nothing
Set ra = Nothing
Set rs = Nothing
End Sub
Sub Search_1(r As Range) '★ サブ
Dim rr As Range
For Each rr In Range(Cells(r.Row, "C"), Cells(r.Row, "AZ"))
If rr.Interior.ColorIndex = xlNone Then
With myArr
.Add ""
Set myArr(myArr.Count - 1) = rr
End With
End If
Next
n = Int(myArr.Count * Rnd)
Set rs = myArr(n)
End Sub
Sub Search_2(r As Range) '★ サブ
Dim rr As Range
For Each rr In Range(Cells(r.Row, "C"), Cells(r.Row, "AY"))
If rr.Interior.ColorIndex = xlNone And rr.Offset(, 1).Interior.ColorIndex = xlNone Then
With myArr
.Add ""
Set myArr(myArr.Count - 1) = Range(rr, rr.Offset(, 1))
End With
End If
Next
If myArr.Count = 0 Then MsgBox "連続した無色セルが存在しません": End
n = Int(myArr.Count * Rnd)
Set rs = myArr(n)
End Sub
No.3
- 回答日時:
正直初級レベルなのでお手上げですね。
例えば
1,2,3,4,5
と塗りつぶしがなければ(xlNone)2個選択の場合、
1,2
2,3
3,4
4,5
の4つのうちどれかって事ですよね?
その辺りを見越して考えましたけど、ベテラン回答者さんに任せるしかないですね。
お返事ありがとうございます。
そうです。4つのうちどれかです。
めぐみんさんには、何度か助けていただいて感謝しています。
ありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 【Excel】指定のセル内容を基に別シートのセルを検索して選択する【VBA】 1 2022/06/16 16:16
- Visual Basic(VBA) VBA 検索と入力 Excel ブック ぶぶぶ シート ししし 列V 検索対象の列です 最終行は、お 6 2023/05/17 01:40
- Excel(エクセル) 指定文字列が該当するA列をアクティブセルにするには 3 2022/08/17 13:18
- Excel(エクセル) 日付で矢印マクロ 4 2023/07/25 16:47
- Excel(エクセル) Excelで関数を使って入力した値を、関数を抜いた値として扱いたい 1 2022/07/08 02:10
- Excel(エクセル) セルの値をグーグルで検索するエクセルVBAについて! 2 2022/08/01 21:41
- Visual Basic(VBA) ExcelVBAのマクロについて。 9 2022/05/04 14:50
- Excel(エクセル) VLOOKUP が機能しない、その原因は何 ? 8 2022/10/19 12:06
- Excel(エクセル) Excelでの検索結果を含む行だけを表示させたい 5 2023/03/10 17:08
- Visual Basic(VBA) 顧客ごとに違う点検案内を作成するマクロ 4 2022/09/16 05:34
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ExcelVBAを使って、値...
-
Excelで指定した日付から過去の...
-
特定のセルが空白だったら、そ...
-
【Excel VBA】指定行以降をクリ...
-
Excelのプルダウンで2列分の情...
-
i=cells(Rows.Count, 1)とi=cel...
-
TODAY()で設定したセルの日付...
-
【Excel】指定したセルの名前で...
-
Excel vbaで特定の文字以外が入...
-
VBAでセルをクリックする回...
-
Excel VBA、 別ブックの最終行...
-
Excel2003 複数セル1列の入力済...
-
エクセルVBAでコピーして順...
-
セル色なしの行一括削除
-
VBAマクロで結合セルを含む列に...
-
特定の文字を条件に行挿入とそ...
-
【VBA】指定したセルと同じ値で...
-
EXCELのVBA-フィルタ抽出後の...
-
EXCELで変数をペーストしたい
-
VBAを使用した時間管理
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ExcelVBAを使って、値...
-
特定のセルが空白だったら、そ...
-
【Excel VBA】指定行以降をクリ...
-
i=cells(Rows.Count, 1)とi=cel...
-
【Excel】指定したセルの名前で...
-
Excelで指定した日付から過去の...
-
特定の文字を条件に行挿入とそ...
-
Excel VBA、 別ブックの最終行...
-
EXCELで変数をペーストしたい
-
Excelのプルダウンで2列分の情...
-
Excel vbaで特定の文字以外が入...
-
TODAY()で設定したセルの日付...
-
screenupdatingが機能しなくて...
-
DataGridViewの各セル幅を自由...
-
Sub 要具ライフ() ActiveSheet....
-
【EXCEL VBA】Range("A:A").Fi...
-
VBAを使用した時間管理
-
VBAでセルをクリックする回...
-
セル色なしの行一括削除
-
エクセルVBAでコピーして順...
おすすめ情報