Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


12210 / 13646 ツリー ←次へ | 前へ→

【11670】ランダムに、データを抽出する方法 みみん 04/3/13(土) 23:05 質問
【11671】Re:ランダムに、データを抽出する方法 アイエネス 04/3/13(土) 23:23 回答
【11675】Re:ランダムに、データを抽出する方法 みみん 04/3/14(日) 7:12 質問
【11676】Re:ランダムに、データを抽出する方法 みみん 04/3/14(日) 7:15 発言
【11678】Re:ランダムに、データを抽出する方法 りん 04/3/14(日) 9:36 回答
【11701】Re:ランダムに、データを抽出する方法 みみん 04/3/15(月) 5:35 質問
【11703】Re:ランダムに、データを抽出する方法 りん 04/3/15(月) 8:29 回答
【11737】Re:ランダムに、データを抽出する方法 みみん 04/3/15(月) 16:59 お礼

【11670】ランダムに、データを抽出する方法
質問  みみん  - 04/3/13(土) 23:05 -

引用なし
パスワード
   はじめまして。マクロの使い方自体がぜんぜん分からない者ですが。
教えていただければうれしいです。

エクセルの表に、
1つ目のデータが、A1からA4まで、
2つめのデータは、B1からB4まで、
3つ目のデータは C1からC4まで・・・・

と同じように続くデータがあるのですが、
どこかに、そのデータを、ランダムに表示できるようにしたいのです。

なにか操作をすると、特定のセルに、
あるときは、Aの列のデータ、
あるときは、Gの列のデータ・・・
が出てくる・・という感じです。

そういったことはできませんでしょうか?

どうぞ、よろしくお願いします・・・。

【11671】Re:ランダムに、データを抽出する方法
回答  アイエネス  - 04/3/13(土) 23:23 -

引用なし
パスワード
   こんにちは みみんさん


>なにか操作をすると、特定のセルに、
>あるときは、Aの列のデータ、
>あるときは、Gの列のデータ・・・
>が出てくる・・という感じです。

なにか操作すると実行されるマクロを作りたいということですね?
それはいわゆるイベントというものです。その何か操作するという「なにか」が重要です。具体的にならないとマクロの組みようがありません。

特定のセルにランダムにデータを表示するのは、RND関数を使えば可能です。
もっと具体的に教えていただければ、サンプルコードも作りやすいです。
(どういう操作をしたときに実行したいのか、データの入っている範囲、表示する単位(1つのセルか、複数のセルか、一つの列か)

ちなみに、フォームとか使ってますか?使っていると使えるイベントも違ってきます。

【11675】Re:ランダムに、データを抽出する方法
質問  みみん  - 04/3/14(日) 7:12 -

引用なし
パスワード
   こんにちは、アイエネスさん!

早速のお返事をありがとうございました。
ええと、フォームというものが何かわからないのですが;;
セルに一つづつ、ただ、文字を入力していて
表にしてるので、枠でくくっている状態なので、
特別なことは。。。なにもしていないと思いますが;;

>その何か操作するという「なにか」が重要です。具体的にならないとマクロの組みようがありません。

ええと、「なにか」というのは、
例えば、どこかに、ボタンをつくって、そこをクリックすると、
隣のセルに、ランダムでデータの文字が現れるというふうにしたいのです。

具体的に書かせていただきますね。

<データ>

    1   2   3   4

 A  あ   い   う   え
 B  か   き   く   け
 C  さ   し   す   せ
 D  た   ち   つ   て
 ・  ・   ・   ・   ・
 ・  ・   ・   ・   ・
 ・  ・   ・   ・   ・

<やりたいこと>

      1   2   3   4   5

 AA (ボタン) か   き   く   け 
 
      ↑
     ここのボタンを押すと
     セルAA−2から、セルAA−5 までに、
     データの中の、4つの文字をランダムで表示したいのです。
     ただ、4つの文字はセットであって、(あいうえなど)
     「あ き つ て」  とかの表示になっては困るのです。


 さらに、実は、今のデータの状態は、Aの列に、
 その4つセットが何個もならんでいるので、

   1  2  3  4  5  6  7  8  9
 A あ  い  う  え  空  な  に  ぬ  ね 

 できれば、列の抽出でなくて、セルそのものを、4つセットで
 抽出したいのですが。。。
 無理だったら、データを並び替えますが・・・。
   
 いかがでしょうか;;
 なにもわかっていない人が説明してて
 ものすごく分かりにくいと思いますが。
 どうか、よろしくおねがいいたします。

【11676】Re:ランダムに、データを抽出する方法
発言  みみん  - 04/3/14(日) 7:15 -

引用なし
パスワード
   具体的に表にしたものが、ずれてる(><)
すみません(><)
わかっていただけますかああ(T_T)

【11678】Re:ランダムに、データを抽出する方法
回答  りん E-MAIL  - 04/3/14(日) 9:36 -

引用なし
パスワード
   みみん さん、おはようございます。

>わかっていただけますかああ(T_T)
行と列の表示が逆なので縦横どう判断したらよいかわかりません(/_;)

ので、A列に縦に並んでいると判断して

Sub TEST()
  Dim II%, Rpos&
  Randomize (Now)
  '組み合わせが10組あるとして
  II% = Int(10 * Rnd + 1) 'ランダムな数
  'そのブロックの最初の行番号
  Rpos& = (II% - 1) * 5 + 1
  '結果をAA3:AA6に出す
  With ActiveSheet
   .Range("AA3:AA6").Value = .Range(.Cells(Rpos&, 1), .Cells(Rpos& + 3, 1)).Value
  End With
End Sub

こんな感じです。

【11701】Re:ランダムに、データを抽出する方法
質問  みみん  - 04/3/15(月) 5:35 -

引用なし
パスワード
   おはようございます、りん さん
早速のお返事ありがとうございました。

>行と列の表示が逆なので縦横どう判断したらよいかわかりません(/_;)

あうううう。
大ボケぶりを発揮してしまいました(;_;
ごめんなさい。

そして、セットにしたいものは、
列ではなく数字のほうで、行でした(;_;


もう一回かかせていただきますね
セットで表示したいものを、同じ文字にさせていただきます。

<データ>

    A  B  C  D  E  F  G  H  I
 1  あ  あ  あ  あ     い  い  い  い
 2  う  う  う  う     え  え  え  え
 3  お  お  お  お     か  か  か  か
 4  き  き  き  き     く  く  く  く
 5  け  け  け  け     こ  こ  こ  こ
 ・  ・  ・  ・  ・     ・  ・  ・  ・
 ・  ・  ・  ・  ・     ・  ・  ・  ・

<マクロ実行結果>

(例)
    AA  AB  AC  AD  AE
 1   え   え   え   え   え


 セットで表示というのは
 「あ  さ  き  こ」などの表示にしたくないということです。

 それから、データは徐々に増えていくのですが・・・。
 やはり、増えたら増えた分書き換えなくていけないということですよね・・。

>Sub TEST()
>  Dim II%, Rpos&
>  Randomize (Now)
>  '組み合わせが10組あるとして
>  II% = Int(10 * Rnd + 1) 'ランダムな数

 10組というのは、セットが10個ってことですよね?
 上記の例だと、あ〜こまでで、10個ということですよね?

>  'そのブロックの最初の行番号
>  Rpos& = (II% - 1) * 5 + 1

 行番号を指定するということは、
 一つの行に、2セット以上のデータがあってはいけないということでしょうか?
 
 なんにも分かっていない人でごめんなさい;_;
 昔ベーシックならやったことあるぞっと、
 思ったんですが、全然ちがうんですね;;
 
 すこし、できるようになりたいのですが
 II%とはなんぞや、と調べたいときに、
 見にいけるページとかないでしょうか(><)

 どうぞ、よろしくおねがいします。

【11703】Re:ランダムに、データを抽出する方法
回答  りん E-MAIL  - 04/3/15(月) 8:29 -

引用なし
パスワード
   みみん さん、おはようございます

>    A  B  C  D  E  F  G  H  I
> 1  あ  あ  あ  あ     い  い  い  い
> 2  う  う  う  う     え  え  え  え
> ・  ・  ・  ・  ・     ・  ・  ・  ・
> ・  ・  ・  ・  ・     ・  ・  ・  ・
><マクロ実行結果>
>(例)
>    AA  AB  AC  AD  AE
> 1   え   え   え   え   え

なんでひとつ多いの?(;_; ?

まあ、とりあえず。
SpecialCellsで、文字(数値含む、数式は含まない)のセルを取り出して、Randでセルをひとつ選んだあとでグループを判定しています。

Sub test2()
  Dim Cmax&, Cpos&, Crnd& '& = as Long
  Dim Rpos&
  Dim r1 As Range
  'Specialcellsは失敗するとエラーになるのでスキップつけておく
  On Error Resume Next
  '最大横に5組まで対応 aaaa iiii uuuu eeee oooo
  '文字、数値で入っているセルのみが対象
  Set r1 = ActiveSheet.Columns("A:Y").SpecialCells(xlCellTypeConstants)
  On Error GoTo 0
  If r1 Is Nothing Then
   MsgBox "シートが違ってませんか?", vbExclamation
  Else
   'エリア決定(セル範囲がつながっていない場合に対応)
   Cmax& = r1.Areas.Count
   If Cmax& > 1 Then
     Randomize (Now)
     Crnd& = Int(Cmax& * Rnd + 1)
     Set r1 = r1.Areas(Crnd&)
   End If
   'セル決定
   Cmax& = r1.Count
   Randomize (Now)
   Crnd& = Int(Cmax& * Rnd + 1)
   'そのブロックの最初の行番号
   With r1.Cells(Crnd&)
     Rpos& = .Row 'インデックスの示す行
     Cpos& = (.Column \ 5) * 5 + 1 'ブロックの左はし
   End With
   '
   '結果をAA3:AA6に出す
   With ActiveSheet
     .Range("AA1:AD1").Value = .Range(.Cells(Rpos&, Cpos&), .Cells(Rpos&, Cpos& + 3)).Value
   End With
  End If
End Sub

こんな感じです。

> やはり、増えたら増えた分書き換えなくていけないということですよね・・。
 Y列より右に行かなければ大丈夫です。

> 昔ベーシックならやったことあるぞっと、
> 思ったんですが、全然ちがうんですね;;
 同じです。私も最初はN88BASICでしたよ。%や&はその頃の名残です。
VB.Netは全然違うという話ですが。

> II%とはなんぞや、と調べたいときに、
> 見にいけるページとかないでしょうか(><)
 とりあえずヘルプで調べる癖をつければいいのでは?
 トップのページから、質問箱V3,そこから質問箱V2を見に行くことができます。そちらのログも見てみてくださいね。いろんな質問や回答があって面白いですよ。

型宣言文字について (V3質問箱)
http://www21.tok2.com/home/vbalab/bbs/c-board.cgi?cmd=one;no=7911;id=Excel

お暇がありましたら、こちらもどうぞ (V3石鹸箱)
http://www21.tok2.com/home/vbalab/bbs/c-board.cgi?cmd=ntr;tree=717;id=

【11737】Re:ランダムに、データを抽出する方法
お礼  みみん  - 04/3/15(月) 16:59 -

引用なし
パスワード
   こんにちは、りん さん

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

>なんでひとつ多いの?(;_; ?

・・・・・・・。

もはや、プログラミングに向いていない性格を露呈してしまいましたねーー;
お恥ずかしい・・・。

しかし、しゅばらしいものが、できてしまいました^−^
ありがとうございますうう。

書いてくださったプログラムは、
なんとなくわかるような・・・・・・
やっぱり、わからないです・・・−−;

ですが、解説付きで書いてくださってるので
これから、お勉強していきたいと思います。
こんな性格なんですが、プログラムつくったりするの好きなんですよう;;

また、お世話になるかもしれませんが><
その時は、また、よろしくお願いします。

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

12210 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free