簡単な数独(3X3)をGoogle先生に聞きながら作ってみたいと思います。
マニュアル読むの嫌いな素人が、色々実験し結果を試してみます。
Selection.Areas 何?
Selection.Areas.Count
選択してる範囲がいくつあるか
Selection.Areas.Application.Value
範囲選択されているものがなんのソフトかを取得する
Selection.Areas(1).Rows.Count
範囲選択されている範囲に含まれる「行数」
Rows で Row ではない
12-5+1=8
Selection.Areas(1).Columns.Count
選択されている範囲の「列数」
Selection.Areas(1).Address
選択範囲のアドレス番地を取得
範囲選択されているセルの値
For Each r In Selection.Areas(1) MsgBox (r.Value) Next
順番に値取得してます。
選択範囲を別の場所にコピー
Selection.Areas(1).Copy Range("A6")
選択範囲を「A6」開始でコピーします
枠までコピーされてしまう。
値のみをコピーする
Public Sub test() Selection.Areas(1).Copy Range("H8").PasteSpecial xlPasteValues End Sub
これで値だけになります
VBAで範囲選択するには「シートのアクティブ」が必要
Public Sub getOneNum() Worksheets("Date").Activate 'これが大事、アクティブにしないと選択できない Worksheets("Date").Range(Cells(2, 2), Cells(4, 4)).Copy End Sub
裏で範囲選択し、値をコピーするの無理なようです。
Rangオブジェクトの位置・大きさ取得
Cells().Top
Public Sub test() MsgBox (Cells(3, 3).Top) End Sub
Cells().Left
Cells().Height
VBAで取得した値と、Excelで取得した値、微妙に違う。
Cells().Width
単位として、Point / 文字数があるようです。
シェイプ丸をセルを中心にして配置
Public Sub check() Dim x As Long Dim y As Long x = Cells(3, 3).Left + Cells(3, 3).Width / 2 - 90 y = Cells(3, 3).Top + Cells(3, 3).Height / 2 - 90 With ActiveSheet.Shapes.AddShape(msoShapeOval, x, y, 180, 180) .Fill.ForeColor.RGB = RGB(0, 0, 0) .Fill.Transparency = 1 .Line.Weight = 7 .Line.ForeColor.RGB = RGB(255, 0, 0) .Line.Transparency = 0.6 End With End Sub
重複しない乱数を作る
'------------------------------------------------ ' 重複しない乱数3個 '------------------------------------------------- Public Function getRndNum() As Variant() Dim flg(1 To 9) As Boolean Dim getNum(3) As Variant For i = 0 To 2 Do getNum(i) = Int(Rnd * 9) If flg(getNum(i)) = False Then flg(getNum(i)) = True Exit Do End If Loop Next getRndNum = getNum End Function
コメント