|
みみん さん、おはようございます
> 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=
|
|