アプリ版:「スタンプのみでお礼する」機能のリリースについて

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”→検索された値の列番号のふたつめ

添付画像は、画像の尺があるので一部を非表示にしてあります。
よろしくお願いします。

「ランダムにセルを選択」の質問画像

A 回答 (5件)

No.4です。



>I2は事前に書式を表と同じにしてあるのが条件。

とは『数字が1桁の場合先頭に0が付くように』と言う意味です。
もっと短く書けるようになりた~い。
    • good
    • 0
この回答へのお礼

お返事ありがとうございます。

いつもいつもありがとうございます。
本当に感謝です!
vbaの勉強を始めてからもうすぐ3年ですが
いつになったらめぐみんさんみたいにコードが書けるのか・・・

本当にありがとうございました。

お礼日時:2020/05/24 16:10

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
    • good
    • 0

正直初級レベルなのでお手上げですね。



例えば
1,2,3,4,5
と塗りつぶしがなければ(xlNone)2個選択の場合、
1,2
2,3
3,4
4,5
の4つのうちどれかって事ですよね?
その辺りを見越して考えましたけど、ベテラン回答者さんに任せるしかないですね。
    • good
    • 0
この回答へのお礼

お返事ありがとうございます。

そうです。4つのうちどれかです。
めぐみんさんには、何度か助けていただいて感謝しています。
ありがとうございます。

お礼日時:2020/05/24 09:10

検索するセルの個数は1か2の限定なのでしょうか?



それより関連する以前の質問があったならそのリンクを貼って欲しかったかも。
    • good
    • 0
この回答へのお礼

お返事ありがとうございます。

セルの個数は、1か2限定です。

関連する質問ですが、実はめぐみんさんに今年の1月18日にお世話になっています。
題名は「表の項目整理」でした。教えてもらったコード爆速でした。
表を整理した後、色付けして、他の項目も追加して今に至っています。

お礼日時:2020/05/23 10:40

上手くいかないコードを載せてみては?


間違い・改良箇所がわかって勉強になるかもですよ。(私は初級者ですから力になれないかもですが)
    • good
    • 0
この回答へのお礼

お返事ありがとうございます。
3ヶ月くらい前からコツコツとvbaを作成して、完成しつつあるのですが
ランダムに検索させる方法がネットを見ても理解できず困っています。

コードを載せて質問したときもあるのですが、その段階に至っていません。

お礼日時:2020/05/23 09:35

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