vba の 操作 への返答
投稿で使用できる特殊コードの説明。(別タブで開きます。)
以下の返答は逆順(新しい順)に並んでいます。
投稿者 るしぇ  (社会人)
投稿日時
2008/12/17 23:09:14
うん。まぁ、面倒臭そうなのでこんなのを
ThisWorkbook に記述して勉強してみるとか。
ThisWorkbook に記述して勉強してみるとか。
Private TargetSheet As Worksheet
Private y As Integer
Private x As Integer
Private Const RowMax As Integer = 10
Private Const ColMax As Integer = 20
Sub StartProgram()
Set TargetSheet = GetSheet("Sheet1")
If TargetSheet Is Nothing Then Exit Sub
Call SetTestCellData(TargetSheet)
y = 1
x = 1
UserForm1.Show vbModeless
Call Output
End Sub
Public Function GetSheet(ByVal SheetName As String _
, Optional ByVal MsgFlag As Boolean = True) As Worksheet
Dim wAns As Worksheet
On Error GoTo ErrMsg
Set wAns = ThisWorkbook.Sheets(SheetName)
Set GetSheet = wAns
Exit Function
ErrMsg:
Set GetSheet = Nothing
If MsgFlag Then
MsgBox SheetName & " シート(or グラフシート)が存在しません。"
End If
End Function
Private Sub SetTestCellData(st As Worksheet)
Dim row As Integer
Dim col As Integer
Dim Data(1 To RowMax, 1 To ColMax) As Variant
For row = 1 To UBound(Data, 1)
For col = 1 To UBound(Data, 2)
Data(row, col) = CStr(row) & "," & CStr(col)
Next
Next
st.Range("$A$1").Resize(UBound(Data, 1), UBound(Data, 2)).Value = Data
End Sub
Private Sub Output()
UserForm1.TextBox6.Text = TargetSheet.Cells(y, x).Value
y = y + 1
If y > RowMax Then
y = 1
x = x + 1
If x > ColMax Then Exit Sub
End If
Application.OnTime Now + TimeValue("00:00:01"), "ThisWorkbook.Output"
End Sub
投稿者 n  (社会人)
投稿日時
2008/12/17 22:41:06
じゃなくてぇ・・・。
変数に初期値を入れることが「変数の初期化」なのよね。
君の提示しているコードで判断したんだけど。
何をカウントしてるのかも分からないし、そもそも提示しているコードが
マクロ内の何処に記述されているのかも分からない。
想像で同一プロシジャの中に書かれてると思って回答しているんだけど。
あんまし良くないコードだけど今の情報でつくってみた。
ひょっとしてカウント方法がわからなかっただけ?
#VBAってコンストラクタとかって概念ないのねorz
変数に初期値を入れることが「変数の初期化」なのよね。
君の提示しているコードで判断したんだけど。
何をカウントしてるのかも分からないし、そもそも提示しているコードが
マクロ内の何処に記述されているのかも分からない。
想像で同一プロシジャの中に書かれてると思って回答しているんだけど。
Private count As Long
Private x As Long
Private y As Long
Private Sub Macro1()
If count = 0 Then x = x + 1
y = 1
UserForm1.Textbox6.Text = ActiveSheet.Cells(y, x).Value
count = count + 1
If count > 9 Then count = 0
End Sub
あんまし良くないコードだけど今の情報でつくってみた。
ひょっとしてカウント方法がわからなかっただけ?
#VBAってコンストラクタとかって概念ないのねorz
投稿者 (削除されました)  ()
投稿日時
2008/12/17 22:05:47
(削除されました)
投稿者 鍵  (社会人)
投稿日時
2008/12/17 21:33:08
>最初はセルA1を対象にして、次はB2を対象にするのだから
すみません、「B2」ではなくて「B1」でした。
すみません、「B2」ではなくて「B1」でした。
投稿者 鍵  (社会人)
投稿日時
2008/12/17 21:31:53
こんにちは。
とりあえずnさんが説明してくれたことについては
理解していただけたんですよね?
の部分を
みたいな感じにすればいいのではないのでしょうか。
最初はセルA1を対象にして、次はB2を対象にするのだから
増やすのはxですよね?
とりあえずnさんが説明してくれたことについては
理解していただけたんですよね?
y = 2
x = 1
の部分を
y = 1
x = x + 1
みたいな感じにすればいいのではないのでしょうか。
最初はセルA1を対象にして、次はB2を対象にするのだから
増やすのはxですよね?
投稿者 あああ  (社会人)
投稿日時
2008/12/17 21:06:50
y = 2
x = 1
が初期化ですか。
変数の中身のつもりだったのですが。
y = 2
x = 1
をぬくとセルの始めの位置をどう打てば良いのでしょうか?
x = 1
が初期化ですか。
変数の中身のつもりだったのですが。
y = 2
x = 1
をぬくとセルの始めの位置をどう打てば良いのでしょうか?
投稿者 n  (社会人)
投稿日時
2008/12/17 19:40:09
>y = 2
>x = 1
これが初期化。わかっててやってると思ったけど。
TextBoxに入れる前に毎回これをやってて、その後で
>y = y + 2
とかしても意味がないってこと。
>x = 1
これが初期化。わかっててやってると思ったけど。
TextBoxに入れる前に毎回これをやってて、その後で
>y = y + 2
とかしても意味がないってこと。
投稿者 あああ  (社会人)
投稿日時
2008/12/17 18:51:28
変数の初期化ってどういうことですか?
初心者なんですいません
初心者なんですいません
投稿者 n  (社会人)
投稿日時
2008/12/17 18:15:56
補足。
変数の初期化をそのプロシジャ内でやってないよね?ってこと。
変数の初期化をそのプロシジャ内でやってないよね?ってこと。
投稿者 n  (社会人)
投稿日時
2008/12/17 07:46:38
変数の初期化はどこでやってるの?
まさかそのマクロ内でやってないよね?
まさかそのマクロ内でやってないよね?
投稿者 あああ  (社会人)
投稿日時
2008/12/17 03:51:38
モジュールレベル変数をおこないましたがダメでした。
他に変数が初期化されない方法はありますか?
他に変数が初期化されない方法はありますか?
投稿者 るしぇ  (社会人)
投稿日時
2008/12/17 01:52:05
> ちなみに条件になる時にこのマクロをじっこうするようにしています
このコードを1つの関数内に書いてるなら、毎回 y は 2 で初期化
されて y = y + 2 は意味が無いのでは?
モジュールレベルの変数を用意してみては?
このコードを1つの関数内に書いてるなら、毎回 y は 2 で初期化
されて y = y + 2 は意味が無いのでは?
モジュールレベルの変数を用意してみては?
投稿者 あああ  (社会人)
投稿日時
2008/12/17 01:05:38
ちなみに条件になる時にこのマクロをじっこうするようにしています
Dim y As Integer
Dim x As Integer
y = 2
x = 1
UserForm1.TextBox6.Text = ActiveSheet.Cells(y, x).Value
y = y + 2
2番目行こう拾ってくれない。
Dim y As Integer
Dim x As Integer
y = 2
x = 1
UserForm1.TextBox6.Text = ActiveSheet.Cells(y, x).Value
y = y + 2
2番目行こう拾ってくれない。
投稿者 あああ  (社会人)
投稿日時
2008/12/17 00:35:49
vbaでカウントしていってカウントが10になったらセルA1からtextboxにセルA1の内容を入れる
またカウントが0になり10までカウントしたら今度はセルB1から同じtextboxに内容が入る
というようなマクロを教えてください。
またカウントが0になり10までカウントしたら今度はセルB1から同じtextboxに内容が入る
というようなマクロを教えてください。
目標の回数に達したらexcelのシートから情報(文字を)カウントとは別のテキストボックスに入れたいのです。
そしてまたカウントして次に目標の回数に達したらまた、一つしたのせるから情報を入れたいのです。
自分が上に書いたものは標準モジュールにぶち込んであります。
素人なのでご迷惑おかけしてすいません。