[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『Range のセル位置をFor 〜 Nextで変化させたい』(ウロウロ)
失礼します。
フォームfrmKIHON上にtxt1〜txt10までテキストボックスがあり、
frmKIHONのOKボタンを押すと上記のテキストボックスの内容を
Sheet1の任意のセル欄に転記したいと思ってます。
一行づつ
Sheet1.Range("W2").Value = me.txt1.Value
Sheet1.Range("S10").Value = me.txt2.Value
と書くのが面倒だったので下記のように書いたところ
エラーは出ないのですが転記ができないのです。
セルの位置は標準モジュールで下記のように指定
Public Const STR1 As String = "W2"
Public Const STR2 As String = "S10"
Public Const STR3・・・・・
OKボタンを押す時の処理
Sub cmdOK_Click()
Dim ws As Worksheet Dim i As Integer
Set ws = Worksheets("Sheet1")
For i = 1 To 10 ws.Range("STR"& i).Value = frmKIHON.Controls("txt" & i).Value
Next s
Me.Hide End Sub
どうやらi=1の時
ws.Range("STR"& i).Value
↓
ws.Range(STR1).Value
↓
ws.Range("W2").Value
という風に処理できていないようで、なにか大きく勘違い・根本的な理解が間違っているようなのですが、中々抜け出せない状態です。
恐縮ではございますがご教示いただけませんでしょうか。
< 使用 アプリ:、使用 OS:Windows2000 >
は、STR列のi行になりませんか?
Cells(i, "STR").Value
(マナ) 2018/03/11(日) 19:00
Dim adr(1 To 10) As String
adr(1) = "W2"
adr(2) = "S10"
ws.Range(adr(i)).Value
のようにするとどうでしょうか。
(マナ) 2018/03/11(日) 19:04
"STR"& i→"STR1"の文字列になり、変数名にはならないのでは? https://oshiete.goo.ne.jp/qa/2033484.html
私のやり方で良ければ次のとおりです。
Sub cmdOK_Click() Dim ws As Worksheet Dim i As Integer Dim STR As Variant
Set ws = Worksheets("Sheet1") '割当先アドレスを定義 STR = Array("W2", "S10") For i = 0 To UBound(STR) ws.Range(STR(i)).Value = frmKIHON.Controls("txt" & i + 1).Text Next i Me.Hide End Sub
( NN ) 2018/03/11(日) 22:53
ご希望のFor〜Nextステートメントではないですが、こういった方法もあるかとおもいます。
'OKボタンを押す時の処理
Sub cmdOK_Click()
'==変数の宣言とか
MyRNG As Range Dim i As Integer
'==処理
For Each MyRNG In Worksheets("Sheet1").Range("W2,S10") i = i + 1 frmKIHON.Controls("txt" & i).Value = MyRNG.Value Next MyRNG
Me.Hide End Sub (もこな2) 2018/03/12(月) 17:45
frmKIHON.Controls("txt" & i).Value = MyRNG.Value
↓
MyRNG.Value = frmKIHON.Controls("txt" & i).Value
(もこな2) 2018/03/12(月) 17:48
> NNさま
>"STR"& i→"STR1"の文字列になり、変数名にはならないのでは?
リンク先拝見しました。ただの文字列として扱うので変数としては見てくれないのですね。
>STR = Array("W2", "S10")
上記のように配列で各文字列を格納すれば綺麗にいけますね。有難うございます。
(ウロウロ) 2018/03/13(火) 00:35
Sub cmdOK_Click()
Const STR As String = "W1,S10,A3" Dim ws As Worksheet Dim v As Variant Dim i As Long
Set ws = Worksheets("Sheet1")
For Each v In Split(STR, ",") i = i + 1 ws.Range(v).Value = frmKIHON.Controls("txt" & i).Value Next
Me.Hide End Sub
でも個人的には、10や20なら愚直につらつら書き並べた方が、
セルとテキストボックスのつながりが一目瞭然で好きかも。。。
行をコピペして、必要部分を書きなおせばいいわけですし。。
ループ処理すると、ステップ実行して確認しないと、間違いがないか解らないかも?
まぁ、いづれにしてもステップ実行でデバッグするわけですが。。。
(まっつわん) 2018/03/13(火) 10:13
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.