エクセルマニア

EXCEL vlookupの質問と相談

TOP > 相談と回答 > 「EXCEL vlookup」について
VLOOKUP ピボットテーブル グラフ EXCEL 書式設定 条件付き書式 マクロ
VBA For Do Or If With

「EXCEL vlookup」での検索結果 : 188件見つかりました。(ページ1/19)

EXCEL vlookupの検索結果

【Excel VBA】繰り返し処理を用いてコードを簡略にしたい 以下のコードを記述しました。 (エラーは発生していません...

2017/01/20 18:24 Yahoo知恵袋   閉じる

相談 【Excel VBA】繰り返し処理を用いてコードを簡略にしたい 以下のコードを記述しました。
(エラーは発生していません) しかし、コードが長大になってしまっているため、繰り返し処理を用いてコードの行数を短くしたいと思っていますが、自分の知識だけではエラーが返ってきてしまいます。
---------- Private Sub TextP1_afterupdate() With Worksheets("商品台帳") t = Val(TextP1) If IsError(Application.VLookup(LabelS, .Range("D:AQ"), 5, False)) Or t < WorksheetFunction.VLookup(LabelS, .Range("D:AQ"), 5, False) Then MsgBox "入力した数量に対応する単価は登録されていません。
", vbOKOnly + vbExclamation, "エラー" TextP1 = "" ElseIf WorksheetFunction.VLookup(LabelS, .Range("D:AQ"), 5, False) <= t And t <= WorksheetFunction.VLookup(LabelS, .Range("D:AQ"), 6, False) = True Then TextDN1 = WorksheetFunction.VLookup(LabelS, .Range("D:AQ"), 7, False) Labelssum1 = Val(TextDN1) * Val(TextP1) ElseIf IsError(Application.VLookup(LabelS, .Range("D:AQ"), 8, False)) Or t < WorksheetFunction.VLookup(LabelS, .Range("D:AQ"), 8, False) Then MsgBox "入力した数量に対応する単価は登録されていません。
", vbOKOnly + vbExclamation, "エラー" TextP1 = "" ElseIf WorksheetFunction.VLookup(LabelS, .Range("D:AQ"), 8, False) <= t And t <= WorksheetFunction.VLookup(LabelS, .Range("D:AQ"), 9, False) = True Then TextDN1 = WorksheetFunction.VLookup(LabelS, .Range("D:AQ"), 10, False) Labelssum1 = Val(TextDN1) * Val(TextP1) … ---------- 以降、Vlookup関数の第3の引数(移動する列数)が「38」になるまでこのコードが続きます。
お時間のある方、ご教示お願いいたします。

TextP1, LabelS, TextDN1, Labelssum1 上記4つについては未関知のまま、 取り敢えず同等の記述にまとめてみる [多少速度低下はあるかも] Private Sub TextP1_afterupdate()   Dim c As Long, t As Double   Dim r As Range, m As String   Dim v2 As Variant, v3 As Variant, v4 As Variant   m = "入力した数量に対応する単価は登録されていません。"   Set r = Worksheets("商品台帳").Range("D:AQ")   t = Val(TextP1)   For c = 6 To 36 Step 3 '' または For c = 6 To 39 Step 3 ???     On Error Resume Next     v2 = WorksheetFunction.VLookup(LabelS, r, c - 1, False)     If Err.Number <> 0 Then v2 = t + 1 '' CVErr(1234)     v3 = WorksheetFunction.VLookup(LabelS, r, c, False)     v4 = WorksheetFunction.VLookup(LabelS, r, c + 1, False)     On Error GoTo 0     ''If IsError(v2) Or _     If t < v2 Then       MsgBox m, vbOKOnly + vbExclamation, "エラー"       TextP1 = ""       Exit For     ElseIf v2 <= t And t <= v3 Then '' t <= v3 = True ?? ''       TextDN1 = v4       Labelssum1 = Val(TextDN1) * Val(TextP1)       Exit For     End If   Next End Sub

EXCEL VBAでの列の移動についてです。 現在組んでいるプログラムで、 I = 2 Do While Range...

2017/01/10 14:53 Yahoo知恵袋   閉じる

相談 EXCEL VBAでの列の移動についてです。
現在組んでいるプログラムで、 I = 2 Do While Range("A" & I).Value <> "" ThisWorkbook.Worksheets("Sheet1").Range("AD" & I).Value = Application.VLookup(ThisWorkbook.Worksheets("Sheet1").Range("B" & I).Value, xlBook.Worksheets("Sheet1").Range("G1079:X2463"), 18, 0) I = I + 1 Loop このような処理を行って、対応する値をRange("AD" & I)に入れる処理を行っています。
このループ処理が終わった次は、 I = 2 Do While Range("A" & I).Value <> "" ThisWorkbook.Worksheets("Sheet1").Range("AE" & I).Value = Application.VLookup(ThisWorkbook.Worksheets("Sheet1").Range("B" & I).Value, xlBook.Worksheets("Sheet1").Range("G1079:Y2463"), 19, 0) I = I + 1 Loop このように選択範囲を動かしただけの、全く同じ処理を行っています。
これをまとめてループで行うには、どういう記述をすればよいのでしょうか。
動く部分は2列目のRange("AD" & I) が AE→AF→AG・・・と増えていく。
5列目のRange("G1079:X2463"), 18, 0) が Range("G1079:Y2463"), 19, 0)→Range("G1079:Z2463"), 20, 0) ・・・と増えていく。
この2つです。
駄文で本当に申し訳ありませんが、知恵を貸していただければと思います。
よろしくお願いいたします。

こんにちは。 お書きのコードは、ThisWorkbook のSheet1シートのB列の値を、xlBookのSheet1シートのG1079:G2463 の範囲で検索して一致した行のX列から右側のセル値をThisWorkbook のSheet1シートのAD列より右側にコピーしたいのですね。 コピー元のセル範囲及びコピー先のセル範囲が連続した範囲ならば、範囲を右側にずらすループは不要です。 一例として、以下のコードでどうでしょうか? 全体のコードが判らないので、下記コードを適宜必要な個所に追加又は修正してください。 ---------- '見通しを良くするため、まずワークシートオブジェクト変数と検索行を取得する変数、および何列分コピーするかを指定する変数を追加します。 Dim wsThis As Worksheet Dim wsTrgt As Worksheet Dim rw As Variant, col As Long 'シートオブジェクト変数を定義します。 Set wsThis = ThisWorkbook.Worksheets("Sheet1") Set wsTrgt = xlBook.Worksheets("Sheet1") col = 4 'コピーするデータエリアのセル数を指定 '以下作業部分です I=2 Do While wsThis.Range("A" & I).Value<>"" 'データを指定範囲で検索し、マッチしたデータの相対行数を得ます。 rw = Application.Match(ws.Range("B" & I).Value,wsTrgt.Range("G1079:G2463"),0) '検索に一致する値があれば、コピーを実行します。 If IsNumeric(rw) Then wsThis.Range("AD" & I).Resize(,col).Value = wsTrgt.Range("X1079").Cells(rw,1).Resize(,col).Value End If I=I+1 Loop ---------- With構文を使うと、もう少し短くすっきり書けますが、判りやすさを優先してワークシートオブジェクトを2つ使いました。 コードの動作確認はしておりませんので、エラーがあれば追伸下さい。

accessで質問があります。現在excel⇔accessのデータの変換することを検討しております。 excel→acc...

2016/12/15 20:42 Yahoo知恵袋   閉じる

相談 accessで質問があります。
現在excel⇔accessのデータの変換することを検討しております。
excel→accessに変換する際、コンボボックスをそのまま変換することができないと思いますが、 何かいい方法ありますか? 例えば、excelのデータをvlookupか何かでIDに変換して、その数値を更新クエリで入力して、 コンボボックスに数値を入力することはできますか?どんな方法でもいいですので、教えてください。

質問内容が右往左往しているので整理してもらった方が良いのかな。 1、ExcelからAccessへ「データ」を変換したい。 2、その際「コンボボックス」を変換したい まず、1は判ります。問題は2、Excelのセルにはコンボボックスは無いですし、ActiveXコントロールはセルではないから、もともとデータとして扱っていない。 という事は?入力規則のリストの事でしょうか? まぁ、その辺りは実は深く考えず、ドンとインポートなり、エクスポートなりした方が良いです。データ変換のコツは「データをIDにするなら変換前か変換後にまとめて行う」事です。 今回ならEXCELの中で事前にデータベースと同じ形にしておくのが最も判りやすいでしょう。でも、データベースで扱うなら、Access側にもID-データの組み合わせのデータ(マスターテーブルと呼ばれるあれです)を準備する必要が有りますから、Accessに元のデータのママ移動して、Access側で必要な形に編集して保存しなおす。ってのが実は一番クールなやり方ですが慣れていないと変換漏れやコードの重複なんかが起きちゃいます。馴れていない間はExcel側で済ました方が良いです。 因みにAccessでコンボボックスに数値を入力。ってのは「出来ないけど、出来る」。 やりたいのはおそらく「コンボボックスの中に文字の選択肢が並び、選んだ結果テーブルに入るのはそのID」って処理だと思うんですが、それはコンボボックスの表示項目と取扱項目を別々の列を選択する方法で対応可能です。 https://support.office.com/ja-JP/article/%E3%83%AA%E3%82%B9%E3%83%88-%E3%83%9C%E3%83%83%E3%82%AF%E3%82%B9%E3%81%BE%E3%81%9F%E3%81%AF%E3%82%B3%E3%83%B3%E3%83%9C-%E3%83%9C%E3%83%83%E3%82%AF%E3%82%B9%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%A6%E9%81%B8%E6%8A%9E%E8%82%A2%E3%81%AE%E4%B8%80%E8%A6%A7%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B-70abf4a9-0439-4885-9099-b9fa83517603 (参考)値をコンボ、テキストボックスに名称を表示する方法。 https://hamay.blogspot.jp/2010/03/2.html

Excel マクロについての質問です。 画像のように、シート1とシート2があるとき、 これをVBA(Vlookup)な...

2016/12/15 20:14 Yahoo知恵袋   閉じる

相談 Excel マクロについての質問です。
画像のように、シート1とシート2があるとき、 これをVBA(Vlookup)などを使用し、シート1のIDとシート2のIDで参照。
シート3にシート1の表+IDで紐づけたシート2のランクを最終列に追加して 表示させたいです。
シート1はその他のセルにいろいろ入っていると仮定し、 シート1の罫線などはそのまま反映させたいです。
更に、そのランクの部分も同じく罫線を反映させ、 項目名を入れたいです。
シート1+シート2のランクを最終列に追加と言う形です。
これをVBAで組みたいのですが、お知恵をお貸しください。
宜しくお願い致します。
説明不足で申し訳ありません。
質問などあればお答え致します。

下記のコードでいかがでしょうか? ただしシート2にIDが見つからないデータはシート3には出力しないようにしています。 Option Explicit Sub Sample() Dim st1 As Worksheet, st2 As Worksheet, st3 As Worksheet Dim r1 As Long, r2 As Variant, r3 As Long Set st1 = Worksheets("シート1") 'シート1のシート名(適宜変更して下さい。) Set st2 = Worksheets("シート2") 'シート2のシート名(適宜変更して下さい。) Set st3 = Worksheets("シート3") 'シート3のシート名(適宜変更して下さい。) '高速化のためエクセルの再描画を抑止する Application.ScreenUpdating = False '一旦シート3の2行目以降をクリアする r3 = st3.Range("A" & Rows.Count).End(xlUp).Row If r3 > 1 Then st3.Rows("2:" & r3).Delete 'シート1の2行目からA列の最終行まで繰り返す For r1 = 2 To st1.Range("A" & Rows.Count).End(xlUp).Row 'シート2からIDが一致する行を探す r2 = Application.Match(st1.Range("A" & r1), st2.Columns("A"), 0) '一致する行が見つかったとき If Not IsError(r2) Then r3 = st3.Range("A" & Rows.Count).End(xlUp).Offset(1).Row 'シート1のIDと名前をシート3にコピーする st1.Range("A" & r1).Resize(, 2).Copy st3.Range("A" & r3).PasteSpecial 'シート2のランクをシート3にコピーする st2.Range("B" & r2).Copy st3.Range("C" & r3).PasteSpecial End If Next r1 Application.CutCopyMode = False 'エクセルの再描画を再開する Application.ScreenUpdating = True End Sub

ACCESSを教えて下さい。初心者です。 複数のエクセルデータを整理して、一覧にした資料を定期的に作成することが必要にな...

2016/11/27 00:40 Yahoo知恵袋   閉じる

相談 ACCESSを教えて下さい。
初心者です。
複数のエクセルデータを整理して、一覧にした資料を定期的に作成することが必要になりました。
ACCESSを使用していますが、うまくデータがでてきません。
どなたかアドバイスをいただけないでしょうか? EXCELのVLOOKUPで作ることはできますが、どんどん増えていく顧客データを考え、ACCESSにしようということになりました。
<現存のリスト・・・すべてEXCEL *顧客NOは共通> ① 顧客リスト NO(連番)・顧客NO・担当者・顧客会社名・〒・住所1・住所2(ビル名)・TEL・FAX・ 代表者名・役職・DM発送可否(NOのみ記入)・FAX可否(NOのみ記入)・備考 ② 顧客種別リスト 顧客NO・担当者・顧客会社名・ 顧客種別(チェーン店・個人店・その他)・顧客売上ランク(A~E)・顧客ブロック ③ 売上リスト(各月)特別なソフトからデータをダウンロードして作成している 顧客NO・売上数・売上金額 ④ 経費リスト(各月)特別なソフトからデータをダウンロードして作成している 顧客NO・顧客会社名・担当・交際費・販促費 ⑤ 訪問数リスト(各月)特別なソフトからデータをダウンロードして作成している 顧客NO・顧客会社名・担当・訪問回数・TEL回数 <作りたいリスト(毎月&四半期&年間累計)> 顧客NO、顧客会社名、顧客種別、顧客売上ランク、担当者、売上数、売上金額、交際費、販促費、訪問回数 *注意点 1.顧客リストはEXCELとリンクが必須、できればEXCELでの更新もできるようにしたい。
2.別のリストでもよいので、売り上げも経費もない顧客(これから注力する店)も知りた い <現状> ・顧客リストをエクセルからリンクさせ、ほかのリストはアクセスにインポートした。
顧客番号でリレーションシップを作り、売上げ数と金額は出すことができたが、さらに訪問回数を出そうとすると1件も出てこない。
・エクセルからのリンクなので、顧客リストの顧客番号が主キーにできず、売り上げの顧客番号を主キーにしている。
本を見ていても解決方法がわかりません。
ヒントだけ、途中までのアドバイスでも構いません。
どうぞよろしくお願いいたします。

クエリ上で必要なデータを持つテーブルを「顧客リスト」の「顧客NO」をもとに(すべての結合プロパティを「'顧客リスト'の全レコードと'「結合テーブル」'の同じ結合フィールドのレコードだけを含める。」に設定して)結合して必要なフィールドを並べるだけでできませんか? リレーションシップを結んでなくてもクエリ上の画面上部のフィールド一覧をドラッグ&ドロップで結合することができ、結合のラインを右クリックで結合オプションを設定できます。 ※またこの際ごちゃごちゃするためリレーションシップに基づきデフォルトで関連付けられてる結合をいったん削除したほうがわかりやすいです。

Excelについて質問です。 VBAでも関数でもいいのですが (処理が早いほうがいいです。 というか重たくならないほう...

2016/10/24 14:38 Yahoo知恵袋   閉じる

相談 Excelについて質問です。
VBAでも関数でもいいのですが (処理が早いほうがいいです。
というか重たくならないほうです) やりたいことは(VBA記述) mypath = ThisWorkbook & \フォルダA\フォルダB\このブック このブックの中の値を VlookUPをしたいのですが まず フォルダAというのは名前は固定です。
(仮に「業者」) フォルダBというのが業者の名前の左から1文字 (ああああ株式会社なら「あ」というフォルダ) このブックを「ああああ株式会社」 とします。
Book(検索)で A1に「ああああ株式会社」と入力すると 業者→あ→ああああ株式会社の値で Vloolup(A1,参照値がああああ株式会社のA1:D100,2,0) という風にしたいのですが、 まず参照値は、Indirect,Value,left 等を使えば できるのでしょうか? 'C:\フォルダA\フォルダB\このブックのように固定されているなら できますが、フォルダBをA1の左1文字で判定させたいのです すると Vloolup(A1,C:\業者\Value(Left(A1,1))\[A1& xlsx]Sheet1!A1:D100,2,0) のような形になるのでしょうか? またこのようなことをVBAでするとしたらどうするのでしょうか? 処理が早い(重たくならない)方法を教えてほしいです。

以下でどうなりますか ファイルはオープンせずにデータを入手します(多分速い) VBA 記述は、標準モジュール・シートモジュールの2か所に 動き的には、 シートモジュールに記述したシートの A 列に入力あれば、 結果を隣の B 列に表示します この辺の方法については、以下から次々辿れると思います エクセルでのマクロに関して伺いたい事が有りま http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q12164833032 ※ もし試されたら、どの程度の速さだったのか教えてください ※ 標準モジュールに以下数行 Option Explicit Public gvA As Variant Public Function mymyVal(v As Variant) As Variant    gvA = v End Function ※ 以下はシートモジュールに Option Explicit Private Sub Worksheet_Change(ByVal Target As Range)    Dim rng As Range, r As Range    Dim v As Variant    Dim sPath As String, sFile As String    Dim sFmr As String, sS As String    Dim i As Long    Const CFILE As String = "{%1}\{%2}\{%3}.xlsx"    Const CF As String = "=mymyVal('{%1}[{%2}]Sheet1'!A1:B100)"    Set rng = Intersect(Target, Me.UsedRange, Range("A:A"))    If (rng Is Nothing) Then Exit Sub    On Error Resume Next    Application.EnableEvents = False    For Each r In rng       If (r.Value <> "") Then          v = Empty          sS = r.Value '         sPath = "C:\業務"          sPath = ThisWorkbook.Path & "\業務"          sPath = Replace(CFILE, "{%1}", sPath)          sPath = Replace(sPath, "{%2}", Left(sS, 1))          sPath = Replace(sPath, "{%3}", sS)          sFile = Dir(sPath)          If (sFile <> "") Then             i = Len(sPath) - Len(sFile)             sFmr = Replace(CF, "{%1}", Left(sPath, i))             sFmr = Replace(sFmr, "{%2}", sFile)             gvA = Empty             r.Offset(, 1).Formula = sFmr             v = WorksheetFunction.VLookup(sS, gvA, 2, 0)          End If          r.Offset(, 1).Value = v       End If    Next    Application.EnableEvents = True End Sub

Sub 判定() dim i as long for i = 13 to 200 Dim myR On Erro...

2016/10/17 11:26 Yahoo知恵袋   閉じる

相談 Sub 判定() dim i as long for i = 13 to 200 Dim myR On Error GoTo ErrorHandler With Worksheets("エラーチェック") myR = Application.WorksheetFunction.VLookup(.Range("G"&i), Worksheets("CSV貼り付け").Range("E13:F200"), 2, False) .Range("I"&i ).Value = myR End With Exit Sub ErrorHandler: Worksheets("エラーチェック").Range("I"&i ).Value = "該当無し" i = i + 1 Next End Sub Excel2010を利用しています。
Worksheets("エラーチェック")のG13~G200にデータがあります。
Worksheets("CSV貼り付け")のE列を参照して、Worksheets("CSV貼り付け")F列の値を、 Worksheets("エラーチェック")I列に表示されたいと考えています。
上記のコードでは、Worksheets("エラーチェック")I13にか表示されないのですが、 たぶん、ループのコードがわからなくて困っています。
お手数ですが、ご教示お願いします。

エラー処理はループの中で行うのがいいでしょう。 Sub 判定() Dim i As Long Dim myR As Variant With Worksheets("エラーチェック") For i = 13 To 200 myR = Application.VLookup(.Range("G" & i), Worksheets("CSV貼り付け").Range("E13:F200"), 2, False) If IsError(myR) = True Then Worksheets("エラーチェック").Range("I" & i).Value = "該当無し" Else .Range("I" & i).Value = myR End If Next End With End Sub

VBA マクロ 条件が一致する別シートの時間を使って開始と終了の時間算出する方法をお教えください。 VBA超Sheet1...

2016/09/15 16:54 Yahoo知恵袋   閉じる

相談 VBA マクロ 条件が一致する別シートの時間を使って開始と終了の時間算出する方法をお教えください。
VBA超Sheet1のD列の頭文字(2桁)と、sheet2のA列が一致するC列(準備時間)を使って Sheet1の開始時間と終了時間を求めたいのです。
F5の開始時間は8:35からです。
今まではマクロの記録で作った下記で算出しておりましたが、(関数"=$F5+VLOOKUP(LEFT($D5,2),Sheet2!$A:$C,3)”を使って)10:00~10:30、12:00~13:00、15:00~15:30、17:00~17:30の時間を抜くことになりました。
もうどうすればいいのか全くのお手上げです(ノД`;) 今はマクロを回した後、該当時間のセルを消して関数を入力するのを繰り返しております・・・。
これができるとすごくうれしいです。
よろしくお願いいたします。
Sub ボタン1_Click() Range("F5").Select ActiveCell.FormulaR1C1 = "8:35" Range("G5").Select Range("F6").Select ActiveCell.FormulaR1C1 = "=R[-1]C7" Range("F6").Select Selection.AutoFill Destination:=Range("F6:F504") Range("F6:F504").Select Range("G5").Select Selection.AutoFill Destination:="=RC6+VLOOKUP(LEFT(RC4,2),Sheet2!C1:C3,3)" Selection.AutoFill Destination:=Range("G5:G504") End Sub Windows7でExcel2010を使っております。

小一時間悩みましたが質問です。 ①Sheet2の準備時間は「秒」ですよね?(型番V5の準備時間は20秒) ②もし終了時間が休憩時間に入り込んでしまったときはその型番の開始は休憩終了後にしますか?(9:59:40開始で準備時間が30秒の型番は10:30開始にするのか、それとも次の型番から10:30開始にするのか?ということです) ③F列とG列は絶対に数式にする必要があるのでしょうか?(マクロの中で時刻を計算して値を設定してはいけないのか、ということです)

何方かExcel VBAの記述についてご教示ください。初心者になります。 Sheet1には不確定な行からなる以下の内容...

2016/09/02 16:19 Yahoo知恵袋   閉じる

相談 何方かExcel VBAの記述についてご教示ください。
初心者になります。
Sheet1には不確定な行からなる以下の内容が記載されている状態です。
A列 B列 1メーカーCD メーカー名 2・・・・・ ・・・・ ・・ 3・・・・・ ・・・・・・ 4・・・・・ ・・・・・・ Sheet2にはメーカーコードの班構成一覧として以下の内容が記載されています。
A列 B列 C列 1メーカーCD メーカー名 班 2・・・・・ ・・・・・ 1班 3・・・・・ ・・・・・ 2班 ・ ・ 72・・・・・ ・・・・・ 72班 メーカCDをkeyとして、Sheet1のC列にSheet2の班を追加したVBAを作成したいのですが、上手く班を追加ことができませんでした。
こちらが作成した記述内容になります。
Sub Macro1() ' Dim i As Long Dim n As Long Dim TeamOrganization As Long '行のカウント n = Cells(Rows.Count, "A").End(xlUp).Row For i = 2 To n ' メーカコードを使用してVlookUpで班を取得する TeamOrganization = Application.WorksheetFunction.VLookup(Sheet1.Cells(i, 1), Sheet2.Range("A1:C72"), 3, False) ' 所定の場所へ出力する Sheet1.Cells(i, 3).Value = TeamOrganization Next End Sub 説明不足で申し訳ございませんが、不備箇所と訂正方法をご教示いただけますでしょうか。
よろしくお願いいたします。

シートはきちんと定義します。 メーカー名は数値かどうかわからないのでVariantで定義しました。 必ず整数値ならLongでいいです。 Sub Macro1() Dim sh1 As Worksheet, sh2 As Worksheet Dim i As Long Dim n As Long Dim TeamOrganization As Variant Set sh1 = Worksheets("Sheet1") Set sh2 = Worksheets("Sheet2") Set wr = sh2.Range("A1:C72") '行のカウント n = sh1.Cells(Rows.Count, "A").End(xlUp).Row For i = 2 To n TeamOrganization = Application.VLookup(sh1.Cells(i, 1).Value, wr, 3, False) sh1.Cells(i, 3).Value = TeamOrganization Next End Sub

初の投稿失礼します。 ExcelのVBAについてなのですが, いくつかお聞きしたいことがあります。 ①Cells(1...

2016/08/28 01:34 Yahoo知恵袋   閉じる

相談 初の投稿失礼します。
ExcelのVBAについてなのですが, いくつかお聞きしたいことがあります。
①Cells(1,1) = UserForm1.Textbox1 と、textboxが1などの数字の場合、文字列になってしまうのですが、 数値として入力してほしいです。
なにか必要な処理があるのでしょうか? (実行すると、数字なら右寄りになるのに、左寄りになってしまう。
②userfoamによる修正なのですが まずtextbox1にNoが入ると Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean) Dim x As Long Dim y, z, n, m As Integer x = TextBox1.Value y = 1 '始まり列 z = 26 '終わり列 n = 1 '始まり行 m = 6 '終わり行 On Error GoTo ErrHdl With ActiveSheet TextBox2.Value = _ Application.WorksheetFunction.VLookup(x, Range(Cells(n, y), Cells(m, z)), 2, False) TextBox3.Value = _ Application.WorksheetFunction.VLookup(x, Range(Cells(n, y), Cells(m, z)), 3, False) End With Exit Sub ErrHdl: TextBox2.Value = "範囲外" TextBox3.Value = "" End Sub このコードにより検索できるようにしてます。
そこで、なのですが検索したデータが入っている行を選択した状態に しておきたいのです。
その後,修正でactivecellを条件としているためです。
ようは、常にtextbox1のNoがある行を選択させたいのです。
質問①の文字列の場合、判定されないので 今回この2つの質問をさせて頂きました よろしくお願いします。

r_08_310さん、おはようございます。 まず、文字列として取得した数字を数値に変換するには、Val()関数を使えばよいです。 それから、検索した行を選択状態にさせるには、あらかじめ検索した値の行位置を取得しなければなりませんので、VLookup()関数でいきなり必要な値を得るのでなく、Match()関数で検索するデータの位置を探せばよいです。 他、検索範囲を指定するのに、Range()指定していますが、先頭にピリオドが無いので、With Activesheet 宣言が効いていないです。 (たまたまアクティブシートが対象だったので、見かけ上は正常に動いていますが。) 下にコードの修正例を示します。(検索範囲の指定方法も少し変更しています。) ーーーーーー Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean) Dim x As Long, hit As Variant '検索値取得変数追加 '検索範囲を指定する数値は定数で定義 Const topCol = 1 '検索範囲トップセル列 Const cntCol = 26 '列幅 Const topRow = 1 '検索範囲トップセル行 Const cntRow = 6 '行幅 x = Val(TextBox1.Value) 'テキストボックスの値を数値に変換 With ActiveSheet '数値位置検索 hit = Application.Match(x, .Cells(topRow, topCol).Resize(cntRow), 0) If IsNumeric(hit) Then ’ヒットすれば、その行数が返る 'Index()関数で必要データを取り出す TextBox2.Value = WorksheetFunction.Index(.Cells(topRow, topCol).Resize(cntRow, cntCol), hit, 2) TextBox3.Value = WorksheetFunction.Index(.Cells(topRow, topCol).Resize(cntRow, cntCol), hit, 3) 'ヒットした行を選択する .Cells(hit, topCol).Resize(, cntCol).Select Else 'ヒットしない場合はエラー文字列を返す TextBox2.Value = "範囲外" TextBox3.Value = "" End If End With End Sub



188件見つかりました。(ページ1/19)

1   2  3  4  5  6  7  8  9  10     ...19