Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


6851 / 13646 ツリー ←次へ | 前へ→

【42670】データベースの値取得について ヒロシ 06/9/19(火) 1:48 質問[未読]
【42671】Re:データベースの値取得について かみちゃん 06/9/19(火) 6:16 発言[未読]
【42684】Re:データベースの値取得について ヒロシ 06/9/19(火) 12:35 発言[未読]
【42672】Re:データベースの値取得について ichinose 06/9/19(火) 7:28 発言[未読]
【42683】Re:データベースの値取得について ヒロシ 06/9/19(火) 12:33 発言[未読]
【42703】Re:データベースの値取得について ichinose 06/9/19(火) 19:42 発言[未読]
【42760】Re:データベースの値取得について ヒロシ 06/9/20(水) 23:11 お礼[未読]

【42670】データベースの値取得について
質問  ヒロシ  - 06/9/19(火) 1:48 -

引用なし
パスワード
   こんにちは,9月7日の質問『プロシージャが大きすぎて処理出来ない』を参考
に,ワークシートの指定した位置へのデータ投入について作成させて頂いてま
すが,このような事例を利用して、逆に指定した位置からユーザーフォーム上に
データを表示させると言う事は可能でしょうか?
ちなみに、その時のコードは、
       ↓
=======================================
Private Sub CommandButton1_Click()
  Dim idx As Long
  Dim t_val As Variant
  t_val = Val(TextBox29.Value)
  If Int(t_val) = t_val And t_val >= 1 And t_val <= 34 Then
'        Textbox29の値が1〜34だったら?
    For idx = 1 To 5
     If Controls("OptionButton" & idx).Value = True Then
       Exit For
       End If
     Next idx
 
    If idx < 6 Then
     Call set_form_data(t_val * 5 + idx + 3)
'                ↑この計算式で書き込む行を算出
     End If
    End If
End Sub
'============================================================
Sub set_form_data(rw As Variant)
  Cells(rw, 6) = TextBox2.Value
  Cells(rw, 7) = TextBox7.Value
  Cells(rw, 3) = ComboBox1.Value
  Cells(rw, 4) = ComboBox2.Value
  Cells(rw, 5) = ComboBox3.Value
  Cells(rw, 10) = TextBox28.Value←この部分を変えればと言うのは単純?
  Cells(rw, 18) = ComboBox4.Value
  Cells(rw, 19) = ComboBox5.Value
  Cells(rw, 36) = ComboBox6.Value
  Cells(rw, 37) = ComboBox7.Value
  Cells(rw, 20) = ComboBox8.Value
  Cells(rw, 9) = ComboBox9.Value
  Cells(rw, 12) = ComboBox10.Value
  Cells(rw, 14) = ComboBox11.Value
  Cells(rw, 13) = ComboBox12.Value
  Cells(rw, 15) = TextBox26.Value
  Cells(rw, 16) = TextBox25.Value
  Cells(rw, 17) = TextBox24.Value
  Cells(rw, 22) = TextBox15.Value
  Cells(rw, 23) = TextBox14.Value
  Cells(rw, 24) = TextBox13.Value
  Cells(rw, 25) = TextBox16.Value
  Cells(rw, 27) = TextBox17.Value
  Cells(rw, 28) = TextBox18.Value
  Cells(rw, 29) = TextBox19.Value
  Cells(rw, 32) = TextBox20.Value
  Cells(rw, 33) = TextBox22.Value
  Cells(rw, 34) = TextBox21.Value
  Cells(rw, 35) = TextBox23.Value
End Sub

この例では,2つの指定要素に基づいて投入位置を計算して位置を特定して
います。
何か,VLookup関数やIndex関数を利用したケースよりも簡単そうに出来そうな
感じがしまして....と言うよりVLookup関数やIndex関数の利用に悪戦苦闘し
ているのが本音ですが....

【42671】Re:データベースの値取得について
発言  かみちゃん  - 06/9/19(火) 6:16 -

引用なし
パスワード
   こんにちは。かみちゃん です。

> 逆に指定した位置からユーザーフォーム上にデータを表示させる

私が質問の意味をきちんと理解できていないかもしれませんが、
TextBox28.Value = Cells(rw, 10).Value
というわけではないのでしょうか?

【42672】Re:データベースの値取得について
発言  ichinose  - 06/9/19(火) 7:28 -

引用なし
パスワード
   おはようございます。
>こんにちは,9月7日の質問『プロシージャが大きすぎて処理出来ない』を参考
>に,ワークシートの指定した位置へのデータ投入について作成させて頂いてま
>すが,このような事例を利用して、逆に指定した位置からユーザーフォーム上に
>データを表示させると言う事は可能でしょうか?

ここまでを読めば、下記のコードの変数rwが入力データとして


rw-------> 関数  --------> t_valとidxを出力

という関数があればよいという解釈ですが・・・・。

そうだとすれば、一例ですが、
標準モジュールに
'================================================================
Public Type value_set
  t_val As Long
  idx As Long
  End Type
'===================================
Sub main()
  Dim test As value_set
  test = get_val(25)
  MsgBox test.t_val 'rwが25の時のt_val
  MsgBox test.idx  'rwが25の時のidx
  MsgBox get_val(100).t_val 'rwが100の時のt_val
  MsgBox get_val(100).idx  'rwが100の時のidx
End Sub
'===============================================
Function get_val(ByVal rw As Long) As value_set
  With get_val
    Dim retcode As Long
    retcode = 1
    For .t_val = 1 To 34
     For .idx = 1 To 5
       If .t_val * 5 + .idx + 3 = rw Then
        retcode = 0
        Exit For
        End If
       Next .idx
     If retcode = 0 Then Exit For
     Next .t_val
    If retcode <> 0 Then .t_val = 0
    End With
End Function


mainを実行してみてください。

指定したrwに対するt_valとidxが求めることが出来ます。

とこういうことですか??


>
>この例では,2つの指定要素に基づいて投入位置を計算して位置を特定して
>います。
ですね!!よって、逆を行うとなると、一つの値から二つの要素を見つけなければ
なりませんんね!!この事象の場合は、簡単に出来ましたけど・・。
簡単ではない場合もあると思います。

>何か,VLookup関数やIndex関数を利用したケースよりも簡単そうに出来そうな
>感じがしまして....と言うよりVLookup関数やIndex関数の利用に悪戦苦闘し
>ているのが本音ですが....
うーん、これは、やりたいことにもよりますが。

少なくともVLookup関数やIndex関数は、
それぞれの関数の入力データが何なのか、それによってどんな出力データが返される
関数なのかははっきりHelpに書いてあります。
その関数の機能がヒロシさんがなさりたい処理に使用できるのか否かは、
その仕様がはっきりしないとわかりません。

私の解釈では、上記のコードになります。

検討してみてください。

【42683】Re:データベースの値取得について
発言  ヒロシ  - 06/9/19(火) 12:33 -

引用なし
パスワード
   ▼ichinose さん:
こんにちは。

>ここまでを読めば、下記のコードの変数rwが入力データとして
>
>
>rw-------> 関数  --------> t_valとidxを出力
>
>という関数があればよいという解釈ですが・・・・。
       ↓
すみません,ここのところは,私のイメージでは、
       ↓
>ですね!!よって、逆を行うとなると、一つの値から二つの要素を見つけなければ
>なりませんんね!!この事象の場合は、簡単に出来ましたけど・・。
>簡単ではない場合もあると思います。
       ↓
ではなくて、2つの指定要素はあくまでもユーザーが指定するイメージです。
それに基づいて位置を特定し、その位置のデータをフォームへ表示する感じ
なのですが....

【42684】Re:データベースの値取得について
発言  ヒロシ  - 06/9/19(火) 12:35 -

引用なし
パスワード
   ▼かみちゃん さん:
こんにちは。

>私が質問の意味をきちんと理解できていないかもしれませんが、
>TextBox28.Value = Cells(rw, 10).Value
>というわけではないのでしょうか?
       ↓
私目も当初、その程度で行けるかな?と考えてましたが...
            ↓
>Cells(rw, 10) = TextBox28.Value←この部分を変えればと言うのは単純?

ちょっと違うようです。

【42703】Re:データベースの値取得について
発言  ichinose  - 06/9/19(火) 19:42 -

引用なし
パスワード
   ▼ヒロシ さん:
こんばんは。

>ではなくて、2つの指定要素はあくまでもユーザーが指定するイメージです。
>それに基づいて位置を特定し、その位置のデータをフォームへ表示する感じ
>なのですが....
だとしたら、
かみちゃんさんのおっしゃるように

>私が質問の意味をきちんと理解できていないかもしれませんが、
>TextBox28.Value = Cells(rw, 10).Value
>というわけではないのでしょうか?
でよいと思いますが、

>私目も当初、その程度で行けるかな?と考えてましたが...
            ↓
>ちょっと違うようです。

という違うということが私に納得できるように
具体的に例を引用して説明してください。
現段階では、何が違うのか私にはわかりません。

【42760】Re:データベースの値取得について
お礼  ヒロシ  - 06/9/20(水) 23:11 -

引用なし
パスワード
   ▼ichinose さん:
こんばんは。
ご返答遅れましてすみません。
私目の勘違いでした。
    ↓
>TextBox28.Value = Cells(rw, 10).Value

これでいけるようです。
ありがとうございました。

6851 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free