Excel VBA質問箱 IV

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

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


3949 / 13644 ツリー ←次へ | 前へ→

【59285】構造体?配列? ふうか 08/12/4(木) 21:13 質問[未読]
【59289】Re:構造体?配列? neptune 08/12/4(木) 22:14 回答[未読]
【59290】Re:構造体?配列? ふうか 08/12/4(木) 22:42 お礼[未読]
【59291】Re:構造体?配列? neptune 08/12/4(木) 23:14 回答[未読]
【59292】Re:構造体?配列? SS 08/12/5(金) 9:35 発言[未読]
【59296】Re:構造体?配列? SS 08/12/5(金) 11:05 発言[未読]
【59295】Re:構造体?配列? にぃ 08/12/5(金) 10:25 発言[未読]
【59316】Re:構造体?配列? ふうか 08/12/5(金) 23:29 お礼[未読]

【59285】構造体?配列?
質問  ふうか  - 08/12/4(木) 21:13 -

引用なし
パスワード
   現在下記の様な感じでセルからテキストボックスにデータを入れてるのですが、
矢印の部分を構造体とか配列とか使って構文を短くしようと思っています。
何かスッキリする方法は無いでしょうか・・・・・
構造体や配列等の事はサイトで調べてみたのですが、使った事がないので思いつきません、アドバイス及びヒントの方よろしくお願いします。

Private Sub CommandButton1_Click()
  Dim p_name As String
  p_name = ComboBox1  
  Select Case p_name
    Case "ma"
→     TextBox2 = Range("B2")
→     TextBox3 = Range("C2")
→     TextBox4 = Range("D2")
    Case "mb"
      TextBox2 = Range("B3")
      TextBox3 = Range("C3")
      TextBox4 = Range("D3")
    Case "mc"
      TextBox2 = Range("B4")
      TextBox3 = Range("C4")
      TextBox4 = Range("D4")
  End Select
End Sub

【59289】Re:構造体?配列?
回答  neptune  - 08/12/4(木) 22:14 -

引用なし
パスワード
   ▼ふうか さん:
こんにちは

>現在下記の様な感じでセルからテキストボックスにデータを入れてるのですが、
>矢印の部分を構造体とか配列とか使って構文を短くしようと思っています。
>何かスッキリする方法は無いでしょうか・・・・・
>構造体や配列等の事はサイトで調べてみたのですが、使った事がないので
>思いつきません、アドバイス及びヒントの方よろしくお願いします。
UPされている程度なら充分見易く、スッキリしてますよ。
無理やり構造体や配列をつかっても面倒なだけで意味ないです。

私なら絶対このままですね。(但し、UPされている状態ならですが。)
これ以上触ったら返って可読性が悪くなります。

これ以上の上件数、ステップ数でも、規則性がありそうだから、
もしやっても代入部分を関数か別プロシージャにして分ける程度ですね。

【59290】Re:構造体?配列?
お礼  ふうか  - 08/12/4(木) 22:42 -

引用なし
パスワード
   そうですかぁ〜
ものすごく沢山下に続くので文章短く出来るかと色々考えたんですが、このままがオススメならし現状維持で違う方面で改善を考えてみます。
ありがとうございました

【59291】Re:構造体?配列?
回答  neptune  - 08/12/4(木) 23:14 -

引用なし
パスワード
   ▼ふうか さん:

ん?
ソースがモニター表示に1画面に収まる程度が+アルファ程度ならそのまんまにしますが、
>ものすごく沢山下に続くので文章短く出来るかと色々考えたんですが
ものすごくなら、話は変わりますね。
代入部分だけでも別プロシージャに持っていくとかしますね。

【59292】Re:構造体?配列?
発言  SS  - 08/12/5(金) 9:35 -

引用なし
パスワード
   ▼ふうか さん:

こんなものを考えてみました。
ただし、CELLが飛び石になるとダミーとかIF文を入れる必要があります。

Private Sub CommandButton1_Click()
  Dim p_name As String
  Dim No As Long, i As Long
  Dim lastR As Long 'データ個数
  p_name = ComboBox1
  Select Case p_name
    Case "ma"
      No = 2
    Case "mb"
      No = 3
    Case "mc"
      No = 4
  End Select
  
  lastR = 4 '必要個数に要修正
  For i = 2 To lastR
    Controls("TextBox" & i) = Cells(i, No).Value
  Next i
End Sub

>そうですかぁ〜
>ものすごく沢山下に続くので文章短く出来るかと色々考えたんですが、このままがオススメならし現状維持で違う方面で改善を考えてみます。
>ありがとうございました

【59295】Re:構造体?配列?
発言  にぃ  - 08/12/5(金) 10:25 -

引用なし
パスワード
   ▼ふうか さん:
こんにちは!

ちょっとした別案なのですが。

ComboBoxと同じ文字をシート内の使わない列(セル)に入れてみて
処理を行ってはどうでしょう?


 A  B  C  D ・・・・・・・・・ Z(←参照列)

2   あ  い  う ・・・・・・・・・ ma
3   え  お  か ・・・・・・・・・ mb
4   さ  し  す ・・・・・・・・・ mc





私の例ですとZ列に入れましたが、Z列が不都合とかでしたら
使わない他の列に変えて使用してみてください。

悪魔で別案ですが。

Private Sub CommandButton1_Click()

  Dim p_name As String
  Dim Rn As Range
  
  p_name = Me.ComboBox1.Text
  
  Set Rn = Columns("Z:Z").Find(p_name) '対象列で検索(この場合はZ列)
  
  If Not Rn Is Nothing Then 'Z列で文字が見つかったら
    Me.TextBox2.Text = Cells(Rn.Row, 2).Text
    Me.TextBox3.Text = Cells(Rn.Row, 3).Text
    Me.TextBox4.Text = Cells(Rn.Row, 4).Text
  End If

End Sub

【59296】Re:構造体?配列?
発言  SS  - 08/12/5(金) 11:05 -

引用なし
パスワード
   ▼ふうか さん:
ComboBox1内が今回の操作に関係あるものだけ収められているとすると
こんな感じでも良いのかも知れません。
>
>こんなものを考えてみました。
>ただし、CELLが飛び石になるとダミーとかIF文を入れる必要があります。
>
>Private Sub CommandButton1_Click()
>  Dim p_name As String
>  Dim No As Long, i As Long
>  Dim lastR As Long 'データ個数
   No = ComboBox1.ListIndex + 2
   IF No < 2 Then Exit Sub
>  lastR = 4 '必要個数に要修正
>  For i = 2 To lastR
>    Controls("TextBox" & i) = Cells(i, No).Value
>  Next i
>End Sub
>
>>そうですかぁ〜
>>ものすごく沢山下に続くので文章短く出来るかと色々考えたんですが、このままがオススメならし現状維持で違う方面で改善を考えてみます。
>>ありがとうございました

【59316】Re:構造体?配列?
お礼  ふうか  - 08/12/5(金) 23:29 -

引用なし
パスワード
   皆様ありがとうございます。
勉強がてらの巡回で昨日の質問に対してのレスが沢山付いてたので
ビックリしました。
色々方法あるのですね・・・・
基本的な構文を続けて処理する程度しかまだ理解してなくて本当に助かります。
せっかく教えて頂いたので、今から試させて頂きます。
助かりました〜ありがとうございます!!

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