|
お願いします。
記事No.55989 で Join と Index の使い方をおぼえようと思いましたが若干 Index の使い方に自信がありません。
Sub 九九表準備()
Dim i As Long
i = 1
For i = 1 To 2
With Sheets(i)
.Range("B1:J1").FormulaR1C1 = "=Column()-1"
.Range("A2:A10") = "=ROW()-1"
End With
Next i
With Sheet2
.Range("B2:J10").FormulaR1C1 = "=RC1*R1C"
With .Range("A1").CurrentRegion
.Copy
.PasteSpecial Paste:=xlValues
Application.CutCopyMode = False
End With
End With
End Sub
まず上記マクロで、Sheet2に九九表の答えをを作成します。
そして、手作業でSheet1に九九表を作ることが出来たら、テキストボックスでメッセージを2秒間出すマクロを作りました。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim i As Long
Dim v1, v2 As Variant
Dim x1 As String, x2 As String
Const j As Long = 9
Dim Seien As Object
v1 = Sheet1.Range("B2").Resize(j, j).Value '手作業の結果
v2 = Sheet2.Range("B2").Resize(j, j).Value '答え
For i = 1 To j
x1 = x1 & Join(Application.Index(v1, i, 0)) & " " 'JoinでString型に収める
x2 = x2 & Join(Application.Index(v2, i, 0)) & " "
Next
If x1 = x2 Then '答えがあっていれば
Set Seien = ActiveSheet.Shapes.AddTextbox _
(msoTextOrientationHorizontal, 216#, 175.5, 216#, 123#)
With Seien
.Name = "Ab"
.TextFrame.Characters.Text = "出来上がり"
End With
Me.Range("A1").Select
Application.Wait Now + TimeValue("0:00:02")
Seien.Delete
End If
End Sub
結果には満足していますが、なにかご指摘がありましたら(何でも良いです)ご指導をお願いします。
|
|