• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:用意したセルをランダムに差し込んでいく)

セルをランダムに差し込む方法

このQ&Aのポイント
  • Excelのシートでセルをランダムに差し込む方法について説明します。
  • 特定の語句が含まれるセルの下に、用意したセルをランダムに差し込むことができます。
  • 被りのないランダムなセルの差し込みをするための可変処理についても解説します。

質問者が選んだベストアンサー

  • ベストアンサー
  • kkkkkm
  • ベストアンサー率66% (1715/2585)
回答No.3

差し込むセルはA1からデータが下方向にあり、別シートの24行目のA列から右にB列C列D列・・・・以降不定とあるという事だと思って。マクロでしたら以下のような感じでいかがですか。 Sub Test() Dim IhLastRow As Long, i As Long, j As Long Dim Ih As Worksheet, Sh As Worksheet Dim InsertStr() As String, WStr() As String, SStr As String Dim c As Range, d As Range Set Ih = Sheets("差し込むセル") Set Sh = Sheets("別シート") SStr = "</h2>" IhLastRow = Ih.Cells(Rows.Count, "A").End(xlUp).Row With Sh For Each c In .Range(.Cells(24, "A"), .Cells(24, Columns.Count).End(xlToLeft)) ReDim InsertStr(IhLastRow) Call MakeRnd(Ih, InsertStr, IhLastRow) ReDim WStr(i) i = 0: j = 1 For Each d In .Range(.Cells(24, c.Column), .Cells(Rows.Count, c.Column).End(xlUp)) WStr(i) = d.Value i = i + 1 ReDim Preserve WStr(i) If d.Value = SStr Then WStr(i) = InsertStr(j) i = i + 1: j = j + 1 ReDim Preserve WStr(i) End If Next .Cells(24, c.Column).Resize(UBound(WStr) + 1, 1) = WorksheetFunction.Transpose(WStr) Next End With Set Ih = Nothing Set Sh = Nothing End Sub Function MakeRnd(Ih As Worksheet, ByRef InsertStr() As String, ByVal IhLastRow As Long) As String Dim i As Long, j As Long Randomize For i = 1 To IhLastRow j = Int((IhLastRow - 1 + 1) * Rnd + 1) If InsertStr(j) = "" Then InsertStr(j) = Ih.Cells(i, "A").Value Else i = i - 1 End If Next End Function

すると、全ての回答が全文表示されます。

その他の回答 (5)

回答No.6

ランダムに差し込むのはかなり大変だと思われます。 逆に受け側のセルが特定範囲内からランダムに番号をつけて読み込むという方法です 文字だけの説明だとわかりにくいので、説明があるサイトを張っておきます https://sunagitsune.com/excelrandom/

すると、全ての回答が全文表示されます。
  • kkkkkm
  • ベストアンサー率66% (1715/2585)
回答No.5

> 『</h2>という語句が入っているセル』と、指定することはできるでしょうか? If d.Value = SStr Then ↓ If d.Value Like "*" & SStr & "*" Then に変更してください。 > そのシートだけに差し込みが始まるという形はできますでしょうか? 現在操作対象となっている(選択されている)アクティブなシートを対象にします。 Set Sh = Sheets("別シート") ↓ Set Sh = ActiveSheet に変更してください。

macz1
質問者

お礼

回答ありがとうございます! ランダムに差し込むことができました! これで、憂鬱になりそうな作業を自動でできるようになります。 心から感謝いたします!ありがとうございます。

すると、全ての回答が全文表示されます。
  • kkkkkm
  • ベストアンサー率66% (1715/2585)
回答No.4

No3の訂正です。修正した回答しようと思ったのに忘れてました。 差し込むデータが差し込む量より少ない時にエラーになりますので ReDim Preserve WStr(i) If d.Value = SStr Then WStr(i) = InsertStr(j) i = i + 1: j = j + 1 ReDim Preserve WStr(i) End If の部分を以下に変更してください。 ReDim Preserve WStr(i) If d.Value = SStr Then WStr(i) = InsertStr(j) i = i + 1: j = j + 1 If j = UBound(InsertStr) + 1 Then ReDim InsertStr(IhLastRow) Call MakeRnd(Ih, InsertStr, IhLastRow) j = 1 End If ReDim Preserve WStr(i) End If

macz1
質問者

補足

回答ありがとうございます! 書いていただいたマクロを試してみましたが、動かないようです。 『指定した語句』の</h2>というのは、 実際は<h2>〇〇</h2>という、見出しタグです。 おそらく、</h2>だけを探しているのかもしれません。 『</h2>という語句が入っているセル』と、指定することはできるでしょうか? 説明不足でした。すみません。 また、差し込み先のシートはいろんな名前を付けています。 差し込む毎に、マクロのSet Sh = Sheets("別シート")を変更する必要がありそうです。 開いているシートでマクロを動かすと、 そのシートだけに差し込みが始まるという形はできますでしょうか? 要望が多く、申し訳ないです。 マクロを書いていただき、ありがとうございます!

すると、全ての回答が全文表示されます。
  • masnoske
  • ベストアンサー率35% (67/190)
回答No.2

シート名『差し込むセル』の B列に =RAND() C列に =RANK(B1,B:B) これでC列に重複しない乱数(1からA列のデータ数まで)できます。 なので、その順に従ってA列のデータを差し込んでゆけば良いと思います。

すると、全ての回答が全文表示されます。
  • masnoske
  • ベストアンサー率35% (67/190)
回答No.1

ランダムに差し込むデータは重複しても構わないのですか? </h2> BBBB ←重複 (省略) </h2> FFFF (省略) </h2> BBBB ←重複 (省略) </h2> CCCC (省略)

すると、全ての回答が全文表示されます。

関連するQ&A

専門家に質問してみよう