[[20180311165249]] 『Range のセル位置をFor 〜 Nextで変化させたい』(ウロウロ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『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 >


>Range("STR"& i).Value

は、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.