Excel VBA質問箱 IV

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

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


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

【65205】Dictionaryを使った検索のVBAを教えてください 八家九僧陀 10/4/27(火) 11:02 質問[未読]
【65208】Re:Dictionaryを使った検索のVBAを教えてく... kanabun 10/4/27(火) 11:38 発言[未読]
【65210】Re:Dictionaryを使った検索のVBAを教えてく... 八家九僧陀 10/4/27(火) 14:50 質問[未読]
【65212】Re:Dictionaryを使った検索のVBAを教えてく... かみちゃん 10/4/27(火) 15:47 発言[未読]
【65213】Re:Dictionaryを使った検索のVBAを教えてく... かみちゃん 10/4/27(火) 16:17 発言[未読]
【65217】Re:Dictionaryを使った検索のVBAを教えてく... 八家九僧陀 10/4/27(火) 18:23 質問[未読]
【65218】Re:Dictionaryを使った検索のVBAを教えてく... かみちゃん 10/4/27(火) 20:17 発言[未読]
【65219】Re:Dictionaryを使った検索のVBAを教えてく... 八家九僧陀 10/4/27(火) 23:57 質問[未読]
【65221】Re:Dictionaryを使った検索のVBAを教えてく... かみちゃん 10/4/28(水) 6:58 発言[未読]
【65225】Re:Dictionaryを使った検索のVBAを教えてく... neptune 10/4/28(水) 13:52 発言[未読]
【65231】Re:Dictionaryを使った検索のVBAを教えてく... かみちゃん 10/4/28(水) 19:46 発言[未読]
【65234】Re:Dictionaryを使った検索のVBAを教えてく... neptune 10/4/28(水) 22:07 発言[未読]
【65232】Re:Dictionaryを使った検索のVBAを教えてく... kanabun 10/4/28(水) 19:48 発言[未読]
【65233】Re:Dictionaryを使った検索のVBAを教えてく... かみちゃん 10/4/28(水) 20:04 発言[未読]
【65235】Re:Dictionaryを使った検索のVBAを教えてく... 八家九僧陀 10/4/28(水) 22:37 お礼[未読]
【65209】Re:Dictionaryを使った検索のVBAを教えてく... kanabun 10/4/27(火) 12:04 発言[未読]
【65239】Re:Dictionaryを使った検索のVBAを教えてく... 八家九僧陀 10/4/29(木) 23:02 質問[未読]
【65240】Re:Dictionaryを使った検索のVBAを教えてく... かみちゃん 10/4/29(木) 23:19 発言[未読]
【65241】Re:Dictionaryを使った検索のVBAを教えてく... kanabun 10/4/29(木) 23:22 発言[未読]
【65242】Re:Dictionaryを使った検索のVBAを教えてく... 八家九僧陀 10/4/30(金) 0:08 質問[未読]
【65243】Re:Dictionaryを使った検索のVBAを教えてく... かみちゃん 10/4/30(金) 0:30 発言[未読]
【65244】Re:Dictionaryを使った検索のVBAを教えてく... kanabun 10/4/30(金) 9:37 発言[未読]
【65247】Re:Dictionaryを使った検索のVBAを教えてく... teian 10/4/30(金) 12:33 発言[未読]
【65248】Re:Dictionaryを使った検索のVBAを教えてく... kanabun 10/4/30(金) 13:07 発言[未読]
【65254】Re:Dictionaryを使った検索のVBAを教えてく... 八家九僧陀 10/4/30(金) 21:46 発言[未読]

【65205】Dictionaryを使った検索のVBAを教えてく...
質問  八家九僧陀  - 10/4/27(火) 11:02 -

引用なし
パスワード
   sheet”前月分”のA列に「社員ID」、B列に「氏名」、C列に「前月分支給額」のデータがあります。
Sheet”当月分”で、UserFormを使って入力処理しようと考えています。
そのUserFormには、80個のcombobox,Textboxが配置されています。そのうちのText社員ID(上記のA列)がChangeするたびに、次の手順でText前月分に上記のC列の前月分支給額を反映させたいと思っています。どなたかDictionaryを使ったVBAを教えてください。

1.Text社員ID.valueがsheet”前月分”のA列「社員ID」にあるかないかを判定して、無ければ「該当者のデータがありません。」と表示する。有れば、C列「前月分支給額」から該当者のデータをText前月分に取り込む。

よろしくお願いします。

【65208】Re:Dictionaryを使った検索のVBAを教えて...
発言  kanabun  - 10/4/27(火) 11:38 -

引用なし
パスワード
   ▼八家九僧陀 さん:

>1.Text社員ID.valueがsheet”前月分”のA列「社員ID」にあるかないかを判定して、無ければ「該当者のデータがありません。」と表示する。有れば、C列「前月分支給額」から該当者のデータをText前月分に取り込む。

UserFormのコードをこんな風に組んでみてください

Dictionaryオブジェクトを使うので
★ 事前に Microsoft Scripting Runtime に参照設定しておいてください。

'---------------------------------------------------
Option Explicit

Private dic As Dictionary

Private Sub UserForm_Initialize()
  Dim dat As Variant
  Dim i As Long
  With Worksheets("前月分") '前月分表データを配列にコピー
    dat = .Range("A2", _
     .Cells(.Rows.Count, 1).End(xlUp)).Resize(, 3).Value
  End With
  Set dic = New Dictionary
  For i = 1 To UBound(dat)
    dic(dat(i, 1)) = dat(i, 3) 'key:=社員ID Item:=前月分支給額
  Next
End Sub

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
  Set dic = Nothing   '辞書を開放する
End Sub

Private Sub Text社員ID_Change()
  Dim sID As String
  sID = Text社員ID.Text
  If Len(sID) Then
    If dic.Exists(sID) Then
      Text前月分.Text = dic(sID)
    Else
      ' 無ければ「該当者のデータがありません。」と表示する
    End If
  End If
End Sub

【65209】Re:Dictionaryを使った検索のVBAを教えて...
発言  kanabun  - 10/4/27(火) 12:04 -

引用なし
パスワード
   ついでに、
Dictionaryを使わないこんな方法も考えられます。

UserFormに
  ComboBox  名前 「ComboID」
  Label   名前 「Label氏名」
  TextBox  名前 「Text前月分」
の3つを置いて、お試しあれ(^^

'---------------------------------
Option Explicit

Private Sub UserForm_Initialize()
  Dim dat As Variant
  With Worksheets("前月分") '前月分表データを配列にコピー
    dat = .Range("A2", _
     .Cells(.Rows.Count, 1).End(xlUp)).Resize(, 3).Value
  End With
  With ComboID
    .ListWidth = 400
    .ColumnCount = 3
    .List = dat
  End With
End Sub

Private Sub ComboID_Change()
  With ComboID
    If .ListIndex > -1 Then
      Label氏名.Caption = .List(.ListIndex, 1)
      Text前月分.Text = .List(.ListIndex, 2)
    Else
      Label氏名.Caption = ""
      Text前月分.Text = ""
    End If
  End With
End Sub

【65210】Re:Dictionaryを使った検索のVBAを教えて...
質問  八家九僧陀  - 10/4/27(火) 14:50 -

引用なし
パスワード
   ▼kanabun さん:
早速のご教示ありがとうございます。
comboIDのリストからのデータ取得、すんばらしい裏技(?)ありがとうございました。これからも活用(盗用)させていただきます。

ところで、Dictionaryオブジェクトを使う方法ですが、ひととおり教えていただいたVBAを転記したのですが、転記中、as を入力後にいくつか候補が表示されますが、その中に「Dictionary」の候補がなく、記述することはしたのですが、実行しても「変数が定義されていません」とエラーメッセージが出ます。

ご指示の
>Dictionaryオブジェクトを使うので
>★ 事前に Microsoft Scripting Runtime に参照設定しておいてください。
ですが、helpで検索しても出てきません。
どのように参照設定すればいいのでしょう??

当初質問時に漏れていましたが、当方今だに「Excel 97」を使っています。

【65212】Re:Dictionaryを使った検索のVBAを教えて...
発言  かみちゃん  - 10/4/27(火) 15:47 -

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

>>Dictionaryオブジェクトを使うので
>>★ 事前に Microsoft Scripting Runtime に参照設定しておいてください。
>ですが、helpで検索しても出てきません。
>どのように参照設定すればいいのでしょう??
>
>当初質問時に漏れていましたが、当方今だに「Excel 97」を使っています。

Microsoft Scripting Runtimeは、Office2000以上になりますので、Excel97 では、
Dictionaryオブジェクトは使えません。

http://www.officetanaka.net/excel/vba/tips/tips80.htm

その代替案としては、Collectionを使うとできるかもしれませんが、Excel97の環境がないので、
検証のしようがありません。

【65213】Re:Dictionaryを使った検索のVBAを教えて...
発言  かみちゃん  - 10/4/27(火) 16:17 -

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

>その代替案としては、Collectionを使うとできるかもしれませんが、Excel97の環境がないので、
>検証のしようがありません。

以下のようにすることもできるかもしれません。
(Excel2002で検証していますが、Excel97では環境がないため、検証できません)

Option Explicit

Private dic As Collection

Private Sub UserForm_Initialize()
  Dim dat As Variant
  Dim i As Long
  With Worksheets("前月分") '前月分表データを配列にコピー
    dat = .Range("A2", _
     .Cells(.Rows.Count, 1).End(xlUp)).Resize(, 3).Value
  End With
  Set dic = New Collection
  For i = 1 To UBound(dat)
    dic.Add dat(i, 3), dat(i, 1) 'key:=社員ID Item:=前月分支給額
  Next
End Sub

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
  Set dic = Nothing   'Collectionを開放する
End Sub

Private Sub Text社員ID_Change()
  Dim sID As String
  sID = Text社員ID.Text
  If Len(sID) Then
    Text前月分.Text = ""
    On Error Resume Next
    Text前月分.Text = dic(sID)
    On Error GoTo 0
  End If
End Sub

【65217】Re:Dictionaryを使った検索のVBAを教えて...
質問  八家九僧陀  - 10/4/27(火) 18:23 -

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

お助けありがとうございます。Collectionはなんとかあったようです。
早速修正して実行してみましたが、次のところで「型が一致しません」とのエラーメッセージがでました。どうすれば???

>    dic.Add dat(i, 3), dat(i, 1) 'key:=社員ID Item:=前月分支給額

【65218】Re:Dictionaryを使った検索のVBAを教えて...
発言  かみちゃん  - 10/4/27(火) 20:17 -

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

> 次のところで「型が一致しません」とのエラーメッセージがでました。
>
>>    dic.Add dat(i, 3), dat(i, 1) 'key:=社員ID Item:=前月分支給額

エラーとなったときの変数i の値は確認できていますか?
おそらくA列にエラー値になっているデータがあるのではないかと思います。

エラー値になっている場合は、Collection オブジェクトに追加しないことはできます。

たとえば、以下のような感じです。
    If Not IsError(dat(i, 1)) Then
     dic.Add dat(i, 3), dat(i, 1) 'key:=社員ID Item:=前月分支給額
    Else
     MsgBox i + 1 & "行の値がエラーです。"
    End If

【65219】Re:Dictionaryを使った検索のVBAを教えて...
質問  八家九僧陀  - 10/4/27(火) 23:57 -

引用なし
パスワード
   ▼かみちゃん さん:
たびたびすみません。
試行用にtext社員ID、text氏名、text前月分の3つのboxを配置したuserformを作成して、ご指示いただいたVBAを記述して実行しようとしますが、「型が一致しません」と表示され実行さえできません。
元データの社員IDは「8001」や「13003」等の4桁、5桁の数字(重複はありません)が混在しますが、空白のものはありません。
ただ、立ち上げ前で、社員IDに入力さえできないのでText社員IDは空白のままです。それが原因でしょうか?

>エラーとなったときの変数i の値は確認できていますか?

確認はどうすればできるのでしょうか?

ほんとに世話のやける奴で申し訳ありませんが、ご教示願います。

【65221】Re:Dictionaryを使った検索のVBAを教えて...
発言  かみちゃん  - 10/4/28(水) 6:58 -

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

>試行用にtext社員ID、text氏名、text前月分の3つのboxを配置したuserformを作成して、ご指示いただいたVBAを記述して実行しようとしますが、「型が一致しません」と表示され実行さえできません。

現在のコードを示してください。

>>エラーとなったときの変数i の値は確認できていますか?
>
>確認はどうすればできるのでしょうか?

イミディエイト・ウィンドウに
?△i(△は半角スペース)
または、
print△i(△は半角スペース)
と入力すると、表示されます。

【65225】Re:Dictionaryを使った検索のVBAを教えて...
発言  neptune  - 10/4/28(水) 13:52 -

引用なし
パスワード
   こんにちは。横から失礼
かみちゃん さん>
XL97ですが、collectionは使えますよ。
2000以降と仕様は変わってなかったと記憶してます。

【65231】Re:Dictionaryを使った検索のVBAを教えて...
発言  かみちゃん  - 10/4/28(水) 19:46 -

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

>XL97ですが、collectionは使えますよ。
>2000以降と仕様は変わってなかったと記憶してます。

おっしゃっている意味がよくわからないのですが、
Excel97の場合、Dictionaryは使えないので、Collectionによる方法を提案しているつもりです。
提案したコードは、Excel2002での動作確認はしてありますが、Excel97では環境がないので、検証できていません。

提案したCollectionによるコードは、Excel97で動いたよということでしたら、納得なのですが・・・

【65232】Re:Dictionaryを使った検索のVBAを教えて...
発言  kanabun  - 10/4/28(水) 19:48 -

引用なし
パスワード
   > 次のところで「型が一致しません」とのエラーメッセージがでました。
> どうすれば???
>>    dic.Add dat(i, 3), dat(i, 1) 'key:=社員ID Item:=前月分支給額

> 元データの社員IDは「8001」や「13003」等の4桁、
> 5桁の数字(重複はありません)が混在しますが、空白のものはありません。

ということなので、数値をKeyにしようとしているから
「型が一致しません」のエラーになっているのではありませんか?
試しに以下のように文字列に直して代入すればどうですか?

 dic.Add Key:=CStr(dat(i, 1)), Item:=dat(i, 3) 'key:=社員ID Item:=前月分支給額

【65233】Re:Dictionaryを使った検索のVBAを教えて...
発言  かみちゃん  - 10/4/28(水) 20:04 -

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

>> 次のところで「型が一致しません」とのエラーメッセージがでました。
>> どうすれば???
>>>    dic.Add dat(i, 3), dat(i, 1) 'key:=社員ID Item:=前月分支給額
>
>> 元データの社員IDは「8001」や「13003」等の4桁、
>> 5桁の数字(重複はありません)が混在しますが、空白のものはありません。
>
>ということなので、数値をKeyにしようとしているから
>「型が一致しません」のエラーになっているのではありませんか?

なるほど、そういうことですか。
私は、社員IDをセルの書式設定で文字列にして、数字文字列として検証していました。
書式設定を標準にして、数字文字列を数値としてみたところ、「型が一致しません」になりました。

CollectionオブジェクトのAddメソッドのヘルプの名前付き引数Keyのヘルプに、
>> コレクションの各メンバの処理をするときに、位置を表す数値の代わりに使用
>> できる重複しない文字列を文字列式で指定します。
とありましたので、

私が提示した

     dic.Add dat(i, 3), dat(i, 1) 'key:=社員ID Item:=前月分支給額

の部分は、

     dic.Add dat(i, 3), CStr(dat(i, 1)) 'key:=社員ID Item:=前月分支給額

としないといけないですね。

勉強になりました。

【65234】Re:Dictionaryを使った検索のVBAを教えて...
発言  neptune  - 10/4/28(水) 22:07 -

引用なし
パスワード
   ▼かみちゃん さん:
訳の分らん事書いてすみません。

>おっしゃっている意味がよくわからないのですが、
>Excel97の場合、Dictionaryは使えないので、Collectionによる方法を提案しているつもりです。
との事ですが、

>その代替案としては、Collectionを使うとできるかもしれませんが、Excel97の環境がないので、
>検証のしようがありません。
とあったので、ただ、Excel97でCollectionは使えますよって話でした。
なので
>>2000以降と仕様は変わってなかったと記憶してます。
と書いています。特にVBの文法に従って書いている限り97にない機能を
使わない限り問題ないと言いたかった訳です。

95と97は大幅に変化していると思いますが、それ以降は新しい機能が追加された
程度なので。

誤解を与えたようで申し訳ない。

【65235】Re:Dictionaryを使った検索のVBAを教えて...
お礼  八家九僧陀  - 10/4/28(水) 22:37 -

引用なし
パスワード
   ▼かみちゃん さん:
で、で、できました〜〜〜〜〜ぁ!!!!!!!

>dic.Add dat(i, 3), CStr(dat(i, 1))と修正して、完璧にできました。
[ CStr]、超ド素人の私には????ですが、4文字?追加しただけで、実行できました。IDを変化するたびに、間違いなく金額も変化しました。

かみちゃんさん、kanabunさん、neptuneさん、皆さんほんとにありがとうございました。
このVBAだけでなく、Comboboxでの選択の仕方など、本当に有益でした。
これからも活用(盗用)させてもらいます。

みなさん、ほんとに スゴイ!!!!
VBA質問箱、スゴイ!!!!

【65239】Re:Dictionaryを使った検索のVBAを教えて...
質問  八家九僧陀  - 10/4/29(木) 23:02 -

引用なし
パスワード
   ▼kanabun さん:
今回の質問で、Collectionを使った方法、comboboxを使った方法、2つを教えていただきました。とても便利なVBAですのでの、他にも活用(盗用)したいと考えています。そこで関連で質問させていただきます。

最初の質問にあったように、Userformには約80個のBoxがあります。元になるシートも80列、数百行のリストデータとなっています。

Userformの約80個のBoxのうち、約30個のデータは、「給与マスター」からVloookup関数でデータを読み込ませています。
また、給与明細票も社員IDから各セルにVlookup関数で読み込ませています。
例えばこれらを、ご教示いただいたCollectionを使った方法、comboboxを使った方法、いづれかを使った場合、メモリ量や処理速度等を考慮すれば、普通一般?ではどちらの方法がよいのでしょうか?
あるいは大量(コレくらいなら大量とはいえないかもしれませんが)のデータ処理をするなら、他にベストなVBAがあるのでしょうか?

【65240】Re:Dictionaryを使った検索のVBAを教えて...
発言  かみちゃん E-MAIL  - 10/4/29(木) 23:19 -

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

>最初の質問にあったように、Userformには約80個のBoxがあります。元になるシートも80列、数百行のリストデータとなっています。
>
>Userformの約80個のBoxのうち、約30個のデータは、「給与マスター」からVloookup関数でデータを読み込ませています。
>
> そのUserFormには、80個のcombobox,Textboxが配置されています。

確認なのですが、
UserFormに80個の ComboBox と 80個の TextBox が配置されているのですか?
それとも、ComboBox と TextBox あわせて80個なのですか?

> Collectionを使った方法、comboboxを使った方法、いづれかを使った場合、メモ
> リ量や処理速度等を考慮すれば、普通一般?ではどちらの方法がよいのでしょうか

kanabunさんの意図がよくわからないので見当違いかもしれませんが、
Collection と ComboBox は、あまり関係ないと思います。
むしろ、社員ID を TextBox に入力して、Collectionにより検索するのか、
ComboBox に80列分のデータを格納して、社員IDを選択するのかの
比較になると思います。

なんとなく、視覚的にもComboBoxのほうがいいかもしれません。
検証は、していませんが・・・

【65241】Re:Dictionaryを使った検索のVBAを教えて...
発言  kanabun  - 10/4/29(木) 23:22 -

引用なし
パスワード
   ▼八家九僧陀 さん:

こんばんは。

>例えばこれらを、ご教示いただいたCollectionを使った方法、comboboxを使った方法、いづれかを使った場合、メモリ量や処理速度等を考慮すれば、普通一般?ではどちらの方法がよいのでしょうか?

直接の回答にはなってませんが、私なら ComboBox(またはListBox)方式
で行きます。
理由は、社員ID と氏名のどちらからでも、金額を参照できるので。

【65242】Re:Dictionaryを使った検索のVBAを教えて...
質問  八家九僧陀  - 10/4/30(金) 0:08 -

引用なし
パスワード
   ▼kanabun さん,かみちゃんさん
お二人とも早速のご助言ありがとうございます。
お二人ともcombo方式をオススメでしたので、combo方式を活用させてもらいます。
実際にtest、試行錯誤してみればいいことですが、甘えついでに次のVBAをチェックしていただけませんか?(ホント、厚かましいヤツですみません)

Option Explicit

Private Sub UserForm_Initialize()
  Dim dat As Variant
  With workbook("給与マスター").Worksheets("給与マスター") '給与マスターデータ全部を配列にコピー
    dat = .Range("A2").Currentregion.Value
  End With
  With Combo社員ID
    .ListWidth = 400
    .ColumnCount = 2 ’A列社員IDとB列氏名だけ表示
    .List = dat
  End With
End Sub

Private Sub Combo社員ID_Change()
  With Combo社員ID
    If .ListIndex > -1 Then
      Text氏名.text = .List(.ListIndex, 1)
      Text所属.Text = .List(.ListIndex, 2)
      以下text名  = .List(.ListIndex, 3)
        ・    = .List(.ListIndex, 4)
        ・
        ・
      textBox39  = .List(.ListIndex, 39)
      Textbox40  = .List(.ListIndex, 40)

    Else
      Text氏名.text = ""
      Text所属.Text = ""
      以下text名  = ""
        ・    = ""
        ・
        ・
      textBox39  = ""
      Textbox40  = ""
    End If
  End With
End Sub

【65243】Re:Dictionaryを使った検索のVBAを教えて...
発言  かみちゃん E-MAIL  - 10/4/30(金) 0:30 -

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

>実際にtest、試行錯誤してみればいいことですが、甘えついでに次のVBAをチェックしていただけませんか?

UserFormやシートレイアウトのイチから検証環境を作成するのは大変です。
まずは試行錯誤してみてください。

不具合があるなら、不具合箇所を説明してください。

【65244】Re:Dictionaryを使った検索のVBAを教えて...
発言  kanabun  - 10/4/30(金) 9:37 -

引用なし
パスワード
   ▼八家九僧陀 さん:

>実際にtest、試行錯誤してみればいいことですが、甘えついでに次のVBAをチェックしていただけませんか?

>  With Combo社員ID
>    .ListWidth = 400
>    .ColumnCount = 2 ’A列社員IDとB列氏名だけ表示
>    .List = dat
>  End With
>End Sub
>
>Private Sub Combo社員ID_Change()
>  With Combo社員ID
>    If .ListIndex > -1 Then
>      Text氏名.text = .List(.ListIndex, 1)
>      Text所属.Text = .List(.ListIndex, 2)
>      以下text名  = .List(.ListIndex, 3)
>        ・    = .List(.ListIndex, 4)
>        ・
>        ・
>      textBox39  = .List(.ListIndex, 39)
>      Textbox40  = .List(.ListIndex, 40)
>   (略)

↑は、テストするまでもなく、あきらかに、マズイですよ

ComboBoxのリスト列数を 「40列格納」と指示してないので、
これでは 10列までしか値をもってこれないと思います。

それから、そもそも論ですが、
変更の必要のない値はTextBoxでなく、Labelに表示します。
すべての項目を値の変更可能なTextBoxに表示する必要が
ほんとうにあるのですか?
最終的におやりになりたいことはどんなことですか?
まさか、シートを「表示」することが最終目的ではないですよね?

【65247】Re:Dictionaryを使った検索のVBAを教えて...
発言  teian  - 10/4/30(金) 12:33 -

引用なし
パスワード
   ▼kanabun さん:
>↑は、テストするまでもなく、あきらかに、マズイですよ
>
>ComboBoxのリスト列数を 「40列格納」と指示してないので、
>これでは 10列までしか値をもってこれないと思います。

の指摘については、意味が分かりません。
何が問題なのでしょうか?
質問者さんは、ComboboxのListプロパティにあるアクティブセル領域の値を
セットしてますので、その領域が40列以上あるのであれば問題ないと思います。
10列までと言っているのは、AddItemなどで追加する場合に、
デフォルトでは10列分確保されるってことを言ってますか?

それともCurrentReginで求めた範囲の列数が40列ない場合の指摘だったのでしょうか?

【65248】Re:Dictionaryを使った検索のVBAを教えて...
発言  kanabun  - 10/4/30(金) 13:07 -

引用なし
パスワード
   ▼teian さん:

>何が問題なのでしょうか?
>質問者さんは、ComboboxのListプロパティにあるアクティブセル領域の値を
>セットしてますので、その領域が40列以上あるのであれば問題ないと思います。
>10列までと言っているのは、AddItemなどで追加する場合に、
>デフォルトでは10列分確保されるってことを言ってますか?

申し訳ありません、kanabun、トチ狂っていました m(__)m

Listプロパティに範囲のValueを一括セットしているのですから、
配列のすべての列が格納されますね。
AddItemのときと混同していたようです。

teian さん、ご指摘ありがとうございます。
質問者さん、レスのその部分はスルーしてください。

【65254】Re:Dictionaryを使った検索のVBAを教えて...
発言  八家九僧陀  - 10/4/30(金) 21:46 -

引用なし
パスワード
   ▼kanabun さん:

>それから、そもそも論ですが、
>変更の必要のない値はTextBoxでなく、Labelに表示します。
>すべての項目を値の変更可能なTextBoxに表示する必要が
>ほんとうにあるのですか?
>最終的におやりになりたいことはどんなことですか?

毎月の給与計算処理を、約80個のBox(textbox,comboboxが混在)があるuserformを使って、80列、数百行のリストデータ形式のSheets("台帳")に新規登録や更新、削除等をしたりさせています。
約80個のBoxのうち、所属や基本給単価、標準報酬月額や扶養家族数、控除対象配偶者の有無等の月ごとに変更が生じない固定的な項目は”給与マスター”からBoxに読み込ませ、時間外勤務手当や各種手当等の毎月の変動項目のみ入力しています。また固定的な項目に変更がある場合は、”給与マスター”でしか変更処理できないようにしていますので、その固定項目を現在はVlookup関数で読み込ませています。ご指摘どおり”ただ表示させている”だけですが、教えていただいたCombo社員IDでcomboリストを選択して関係の固定項目を一発で表示させて、登録、修正させたいと思って、この質問をしました。
固定項目については、わざわざtextboxにせず、labelでも、Sheets("台帳")に登録、修正等できるのであれば、labelだけにしたのですが、超初心者でしたので、何でもかんでもBoxからでないとSheetのrangeに転記等できないと思っていました。
このVBAで試してみます。うまくいかなかったら、世話をかけますが、またご教示ください。
有難うございます。

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