|
こんにちは。かみちゃん です。
>sheet1セルの範囲は$A$1:$C$1391です。
>実際には、データは1394まで埋められているのですが
>かみちゃん原因解りましたC1392:C1394空きでした
>C1394に文字入力したところ表示されました。
>なにも入ってないところが途中結構あります。特にC列は・・・
そのようにしたら、原因がわかりますよね?
>これを"コード.xls"のA1からC列最終まで表示させる
この要件に対応したまでです。
C列に何も入っていないセルが途中結構あるが、A列には何も入っていないセル
はないという要件であれば、「A1からC列最終まで」ではなく「A1からA列の値
の入っている最終行のC列まで」ではないでしょうか?
それであれば、
With ws.Range("A1", ws.Cells(Rows.Count, 3).End(xlUp))
を
With ws.Range("A1", ws.Cells(Rows.Count, 1).End(xlUp)).Resize(, 3)
とすればいいです。
>>> 下記3は、2同様検索機能をつけてもらえませんか
>>
>>それでは、要件を提示していただけませんか?
>>[46064]で
>>
>>とだけの提示では、どの列の値が検索条件と部分一致していればいいのかが
>>まったくわかりません。
>
>B列の値が検索条件ですここに会社名が書かれてます
yasuさんでしたら、これだけのヒントの提示があればできると思うのですが、
ほとんど作成依頼に近い形になってしまい、残念です(T_T)
いえ、私は構わないのですが、ご理解いただけずスレッドが長くなってしまい
申し訳ない気持ちです。
ということで、UserForm4を勝手に作りました。
コントロールの配置は、UserForm2、UserForm3と同様です。
CommandButton1のClickイベントのコードがこれだけ変えないといけないとい
うのを実感してください。
'==================================================
'■UserForm4モジュール
' (コード.xlsから検索条件部分一致を選択肢とする)
' (部分一致は全角半角、大文字小文字を無視)
'==================================================
Private Sub UserForm_Initialize()
Me.Left = 150
Me.Top = 100
End Sub
'コード.xlsのA1セル〜A列の値の入っている最終行のC列までをComboBoxへ追加
' 検索条件部分一致を選択肢とする
' 部分一致は全角半角、大文字小文字を無視
Private Sub CommandButton1_Click()
Dim WB1 As Workbook
Dim WB2 As Workbook
Dim strFileName As String
Dim ws As Worksheet
Dim lngRow As Long
Dim rng As Range
Dim ComboBox_Row As Long
Set WB1 = ThisWorkbook
strFileName = Application.GetOpenFilename("Microsoft Excelブック,*.xls")
If strFileName <> "False" Then
Application.ScreenUpdating = False
'すでに開いているかどうかをチェックする
If Not ChkWorkbook(Mid(strFileName, InStrRev(strFileName, "\") + 1)) Then
MsgBox strFileName & vbCrLf & "を開きます"
Set WB2 = Workbooks.Open(strFileName)
Else
Set WB2 = Workbooks(Mid(strFileName, InStrRev(strFileName, "\") + 1))
End If
WB1.Activate
Set ws = WB2.Sheets("Sheet1")
Set rng = ws.Range("A1", ws.Cells(Rows.Count, 1).End(xlUp)).Resize(, 3)
ComboBox_Row = 0
With Me.ComboBox1
.ColumnCount = rng.Columns.Count
For lngRow = 1 To rng.Rows.Count
If StrConv(StrConv(rng.Cells(lngRow, 2).Value, vbWide), vbUpperCase) _
Like "*" & StrConv(StrConv(Me.TextBox1.Value, vbWide), vbUpperCase) & "*" Then
.AddItem rng.Cells(lngRow, 1).Value
.List(ComboBox_Row, 1) = rng.Cells(lngRow, 2).Value
.List(ComboBox_Row, 2) = rng.Cells(lngRow, 3).Value
.ColumnWidths = "20 pt;20 pt;20 pt"
.BoundColumn = 1
ComboBox_Row = ComboBox_Row + 1
End If
Next
End With
Application.ScreenUpdating = True
Else
MsgBox "コード.xlsのファイル選択を中止しました"
End If
End Sub
'ComboBoxの選択値をアクティブセルへ転記
Private Sub CommandButton2_Click()
ActiveCell.Value = Me.ComboBox1.Value
Unload Me
End Sub
'ComboBoxの選択肢を消去
Private Sub CommandButton3_Click()
Me.ComboBox1.Clear
End Sub
'ブックオープン済みチェック関数
Function ChkWorkbook(strWorkbookName As String) As Boolean
Dim wb As Workbook
ChkWorkbook = False
For Each wb In Workbooks
If wb.Name = strWorkbookName Then
ChkWorkbook = True
Exit For
End If
Next
End Function
>>また、セル範囲全体であれば、ComboBoxのRowSourceプロパティに設定すれば
>>いいですが、そのうちの検索条件の部分一致するセルの値だけをComboBoxの
>>選択肢とするならば、RowSourceプロパティではなく、テキスト.txtと同様
>>ループ処理によるAddItmeを使う必要があることが理解できますか?
>
>いえよく解りませんが、部分一致が条件になると思います完全一致はチョット
>難しいです。
完全一致など一言も申し上げていません。
特定のセル範囲(ここではA1〜A列の値の入っている最終行のC列まで)全体を
ComboBoxの選択肢とするには、RowSourceプロパティで簡単に設定できますが、
そのうちの条件に一致(部分であろうが完全であろうが関係ない)するものだ
けを反映させるには、上記UserForm4のCommndButton1のClickイベントのような
記述の仕方をしないと実現できないということです。
>検索でhitしたものはComboBoxにA列からC列まで表示出来ればいいのですが。
>やり方はユーザーフォーム2と同様テキストボックスへ→検索値入力→コマンド
>ボタンにて検索→コンボボックス表示→転記でいいと思うのですが。?
UserForm4でUserForm2と同様に対応しています。
>>そういう複雑なことまでしたい処理なのでしょうか?
>
>上記は複雑ですか
複雑かどうかは、上記UserForm4のCommndButton1のClickイベントの記述を
見て感じてください。
[46066]で提示したStrConv関数のサンプルが複雑と感じるならば、これも
結構厳しいように思います。
>>そもそも、テキスト.txtからコード.xlsに変更する時点で何のためにかが
>>不思議で仕方ないのですが・・・
>不思議ですか 理由として
>1.いつも利用している表が今後そのまま使える。
使い方がよく理解できていないから、不思議に思っているだけかもしれません。
テキスト.txtとコード.xlsの関係もさっぱりわかりませんし・・・
会計専用ソフトのデータでしたら、テキスト.txtはそのソフトから出力され
たデータではないのでしょうか?
コード.xlsは、テキスト.txtとは、まったく別ものですか?
まったく別ものでしたら、私の取り越し苦労です。
同じもので、データを追加修正するにらば、それは、会計専用ソフトですべ
きでは?と経験上思うからです。
>>Excelシート上に展開した時点で、書き換えがよりしやすいデータになって
>>しまうことは、承知の上ですよね?
>これはどちらでも同じでしょうか。?
テキスト.txt と コード.xls との関係がわかりませんので、コメント
できません。
>>(テキストだと書き換えられないというわけではないのですが・・・)
>かみちゃんはテキストを利用した方がいいと、思うのでしょうか?
テキスト.txt と コード.xls が同じであれば、データの改ざんを少しでも
防ぐ観点から、テキスト.txtを使うべきと考えます。
(Excelシートに展開するメリットがまったくない)
>以上のような理由から是非検索機能を搭載しておきたいのです。
>今回も全角半角等Findは使えないですか?
UserForm4モジュールで対応しました。
Findメソッドも使えますが、テキスト.txtと同様の考え方を踏襲するために
あえて使っていません。
必要でしたら、Findメソッドのヘルプに使用例も載っていますから、まずは
しっかり読んでみてください。
|
|