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

皆様、お力を貸して下さい。


Excelにて、指定した範囲内に値を一定数配置したいです。


例えば、A1からC50までの範囲に、"1"という値を、全部で8個セルに入力したいです。
どの場所に入れるかはランダムに指定したいです。

VBAを使用しなくてはいけないんだと思っていますが、
ランダムにセルを指定する部分がよくわかりません。

どなたか教えていただけないでしょうか?

A 回答 (3件)

こんにちは!


VBAではなく関数でやってみました。

E・F列を作業用の列として使用します。
E1セルに 1 を入力 → E1セルを選択 → フィル(Excel2007以降ですと、画面左上にあるΣのアイコンの下にある、下向き矢印のアイコンをクリック)
→ 連続データの作成 → 「列」を選択 → 「停止値」に150と入力しOK
これでE1~E150セルに1からの連番が表示されます。
次にF1セルに
=RAND()
という数式を入れ、フィルハンドルでダブルクリック!
このE・F列のデータを参照します。

A1セルに
=IF(VLOOKUP(3*(ROW(A1)-1)+COLUMN(A1),$E:$F,2,0)<=SMALL($F:$F,8),1,"")
という数式を入れC1セルまでフィルハンドルでコピー → そのまま C50セルまでコピー!

これでF9キーを押すたびに、A1~C50セルに8個の「1」が表示されます。m(_ _)m
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます!
また返信が遅れてしまいごめんなさい。

このようなやり方があったのですね!
全然そのような発想に至りませんでした・・・

最初に回答して頂いたので、ベストアンサーにしたいと思います。

お礼日時:2014/04/14 09:18

>指定した範囲内に値を一定数配置したい



ALT+F11を押す
現れた画面で挿入メニューから標準モジュールを挿入する
現れたシートに下記をコピー貼り付ける

sub macro1()
 dim n as long
’ n = inputbox("count?")
 n = 8
 if n > selection.count or selection.areas.count > 1 then
  msgbox "N/A"
  exit sub
 end if
 selection.clearcontents
 do until application.countif(selection, 1) = n
  selection(int(rnd * selection.count) + 1) = 1
 loop
end sub

ファイルメニューから終了してエクセルに戻る
1を記入したいセル範囲を選ぶ
ALT+F8を押してマクロを実行する。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

教えて頂いた方法でできることを確認致しました。
今後同様の内容をVBAで行う際に、参考にさせて頂きます!

お礼日時:2014/04/14 10:14

No.1 さんみたいに、作業列と SMALL 関数でできると思います。

ベストアンサーは辞退します。

あえて VBA なら、次のような感じで、素直に。セル範囲、セルの個数、記入する値などをユーザーが自由に指定する仕組みについては、いろいろ考えてください。


Sub ArrangeValuesAtRandom()
  Dim rng As Range
  Set rng = Range("a1:c50")
  rng.ClearContents               '既存データを消去
  Randomize                   '乱数系列を更新
  Do Until WorksheetFunction.Count(rng) = 8
    rng(Int(Rnd * rng.Count) + 1).Value = 1  '各ループにおいて記入するセルの番号(位置)をランダムに指定
  Loop
End Sub
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

教えて頂いた方法を元に、範囲や記入する値を色々な方法で変えられるように考えてみます!

お礼日時:2014/04/14 10:15

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