Sub 行と列() Dim tateya As String Dim gouki As String Dim gouki2 As String Dim siriaru As String Dim test As Worksheet Set test = Worksheets("テスト") tateya = test.Range("a1") gouki = test.Range("a2") haihhun = "-" gouki2 = tateya & haihhun & gouki '号機 Dim siri As Worksheet Set siri = Worksheets("シリアル管理") Dim hanni_seru As Variant '範囲指定はバリアント型を使用する事 hanni_seru = siri.Range("D1:L39") 'VLOOKUP(列の条件,A1:D5,MATCH(行の条件,A1:D1)) siriaru = WorksheetFunction.VLookup(gouki2, hanni_seru, WorksheetFunction.Match("H1", "D1:L1")) MsgBox siriaru End Sub 0197デフォルトの名無しさん (アークセー Sxbd-2RUv)2019/10/08(火) 02:02:42.66ID:l+0JwRkcx>>196 たぶんMatchの行条件がおかしいけど、どんな問題が起きてるのか分からないから何とも言えない
VBAでJavaScriptも同様だね。 こっちの方が敬遠したい。 まずはVBAだけで何とかならないかを考える。 0218デフォルトの名無しさん (ワッチョイ 9fa2-8cCB)2019/10/11(金) 17:59:50.09ID:l8XLJu9S0>>216 まじかー vbaでやれるっていうことはwinapiを使うって事だよね? スクリーン上の指定座標の色の識別とかもできたりするの? 0219デフォルトの名無しさん (ワッチョイ b74b-x3kW)2019/10/11(金) 18:32:21.51ID:cTW5CNRi0 特定のアプリのウィンドウに対してキー入力するとかVBAでやってるよ 0220デフォルトの名無しさん (ブーイモ MMcf-4N8v)2019/10/11(金) 20:26:26.20ID:WXbKDhhqM Cells(1,"A")と書かず、判りにくいCells(1,1)と書くのはなぜ? ネットの記述とか見ててもCells(1,"A")と書いてるの見たこと無い 0221デフォルトの名無しさん (ワッチョイ f768-NJTS)2019/10/11(金) 20:52:13.81ID:zntJ+vZ40 マルチかよw 0222デフォルトの名無しさん (ワッチョイ b7ce-NJTS)2019/10/11(金) 22:18:32.49ID:thcocK/e0 はわわ〜 0223デフォルトの名無しさん (アウアウエー Sadf-UHnC)2019/10/11(金) 23:28:47.56ID:CLF8jhxua RPAは所詮VBAに勝てないか っしゃああ 0224デフォルトの名無しさん (ワッチョイ 9fa2-8cCB)2019/10/12(土) 02:44:28.24ID:o9i+oJev0 forでまわせんだろうが 個人的にrangeをなぜ使うかの方がわからん 0225デフォルトの名無しさん (ワッチョイ 9fa2-8cCB)2019/10/12(土) 02:45:37.39ID:o9i+oJev0 ああ、cellsで表現できるのをrangeで表現するのが解らんってことね 0226デフォルトの名無しさん (ワッチョイ f768-NJTS)2019/10/12(土) 06:05:16.65ID:ghJl2hig0 Range("B2:E6").Interior.Color = 65535 こんな場合は使うかな 見た目というかデータに影響を与えない部分はrangeの方が読みやすい、気がする 0227デフォルトの名無しさん (ワッチョイ 9f01-8cCB)2019/10/12(土) 06:55:20.10ID:aSZCz9kN0 朕も同じくだわ 0228デフォルトの名無しさん (ワッチョイ f77c-h29T)2019/10/12(土) 11:15:14.28ID:Wxq9g5aB0 Cells(1, "a")と書くならRangeを使えばいい 0229デフォルトの名無しさん (スフッ Sdbf-hY6M)2019/10/12(土) 11:19:09.64ID:cp8dvw0gd マルチする迷惑な質問者多いな… 0230デフォルトの名無しさん (ブーイモ MMfb-4N8v)2019/10/12(土) 11:58:45.65ID:6ww4xfxmM 繰り返すときCells(i, 1)よりCells(i, "A")の方が判りやすいと思うけど 0231デフォルトの名無しさん (ワッチョイ f768-NJTS)2019/10/12(土) 12:34:57.54ID:ghJl2hig0 列方向に繰り返す時はどうするの 0232デフォルトの名無しさん (ブーイモ MMcf-olh0)2019/10/12(土) 12:37:13.83ID:O9HuO9geM むしろexcel側でR1C1形式がデフォルトになれば良いのに 0233デフォルトの名無しさん (ワッチョイ 9f4b-x3kW)2019/10/12(土) 12:44:34.65ID:9l3IvWTz0 列は作りながら足したり順番変えたりする事が多いので最初からenum作って管理する cells(i, cols.hoge)みたいにしてる 0234デフォルトの名無しさん (ワッチョイ f768-NJTS)2019/10/12(土) 12:46:15.93ID:ghJl2hig0>>232 三四郎に対抗するためにこうなった 結果、シェアを勝ち取ったけど負の遺産として残ってしまったね 0235デフォルトの名無しさん (ワッチョイ 97da-NJTS)2019/10/12(土) 19:24:53.26ID:E5CVP1ep0 アホか 0236デフォルトの名無しさん (アークセー Sxcb-FpGY)2019/10/12(土) 20:28:16.78ID:grx7Z1qlx 経験則から言うと、エクセルのシートを入力フォームや書類のフォーマットのように捉えてる人はRangeを使いがちで、配列やテーブルとして扱えるオブジェクトの塊だと捉えてる人はCellsを使う傾向がある 0237デフォルトの名無しさん (ワッチョイ bfad-la4p)2019/10/13(日) 00:25:27.70ID:ZLXCWom40 あるリストをユーザーフォームで絞り込んでそのユーザーフォームのリストボックスに リスト内容を表示させたいのですがオートフィルタの表示はうまくいくってるのですがリストの表示 先がうまく表示されません。どうしたらいいでしょうか? 以下がコードです private Sub kensaku_bo_Click() 'オートフィルタによる検索 Dim ws_kiki As Worksheet Set ws_kiki = Worksheets("機器履歴") Dim tateya As String '建屋番号 Dim gouki As String '号機番号 Dim gouki2 As String '建屋と号機の合計のセル Dim haihhun As String Dim myData As Variant tateya = ken1.Value gouki = ken2.Value haihhun = "-" gouki2 = tateya & haihhun & gouki '号機 ws_kiki.Range("A1").AutoFilter 3, gouki2 Dim lastRow As Long With ws_kiki lastRow = .Cells(Rows.Count, 1).End(xlUp).Row myData = .Range(.Cells(1, 1), .Cells(Rows.Count, 12).End(xlUp)).Value End With With list_ken .ColumnCount = 12 .ColumnWidths = "50;80;50;50;50;50;50;50;50;50;50;50" .List = myData End With End Sub 0238デフォルトの名無しさん (ワッチョイ b7ce-NJTS)2019/10/13(日) 04:36:36.74ID:PQpo0fQ70 変数で回す時はCells セル位置が固定の時、範囲指定する時はRange 1行ごとにコード入力が楽な方を選んでる 0239デフォルトの名無しさん (ワッチョイ bff7-n5Mu)2019/10/13(日) 09:40:37.82ID:EzRorSmA0>>237 myData(Range型)にはフィルター設定情報は入ってない 一行一行をRow.Hidden判定しながら範囲内ループさせて取り込むしかないね 0240デフォルトの名無しさん (ワッチョイ bff7-n5Mu)2019/10/13(日) 09:49:37.23ID:EzRorSmA0 間違えたmyDataは配列か それでもフィルター情報は乗らないね リストボックスの.RowSourceに範囲アドレス入れて連動させる方法あるけど これフィルターも連動したっけ? 0241デフォルトの名無しさん (ワッチョイ 1fba-7XqI)2019/10/13(日) 15:30:11.40ID:8j4dObBs0 セルC5:C17に数値が入ってます(A) セルF5:F21に数値が入ってます (B) セルY5:Y25に数値が入ってます (C)
AとBの数値のうちCにない数値をセルO5から順番に下に抜き出したいんです
cを配列で格納するまでは出来たのですがそれ以降がわかりません よろしくお願いします
初心者です 0242デフォルトの名無しさん (ワッチョイ b74b-x3kW)2019/10/13(日) 15:41:29.73ID:tc/0x//C0 配列を検索すればいいだけでは 0243デフォルトの名無しさん (ワッチョイ 1fba-7XqI)2019/10/13(日) 15:45:58.47ID:8j4dObBs0>>242 すみません その配列の検索が上手くいかなくて… 0244デフォルトの名無しさん (スフッ Sdbf-Sohv)2019/10/13(日) 16:03:13.56ID:TBfrTFPMd 配列よりコレクションの方が楽では 0245デフォルトの名無しさん (ワッチョイ b74b-x3kW)2019/10/13(日) 16:05:31.06ID:tc/0x//C0 for i = 0 to ubound(配列) if 配列(i) <> 検索したい値 then どこかに出力 end if next
こういう感じでいいんじゃないの 0246デフォルトの名無しさん (ワッチョイ 1fba-7XqI)2019/10/13(日) 16:45:22.08ID:8j4dObBs0>>244 コレクションっていうのがあるんですね 調べてみます ありがとうございます 0247デフォルトの名無しさん (アークセー Sxcb-FpGY)2019/10/13(日) 18:24:09.39ID:0JmSqCe7x 普通のCollectionや配列よりも、Cの値をKeyにしてDictionaryオブジェクトを作る発想の方がいいと思う Dictionary.ExistsメソッドでKeyの存在確認ができるからコードが簡単になる 0248デフォルトの名無しさん (アウアウウー Sa5b-Cvo3)2019/10/13(日) 20:43:23.01ID:2Iz5cpana Dictionaryは平均的なVBAerには理解できないから却下 他人に理解できないもん作るんならVBAを選ぶ意味がない 0249デフォルトの名無しさん (ワッチョイ 9f4b-x3kW)2019/10/13(日) 21:17:01.40ID:GzZlIE9V0 dictionary楽なのに 0250デフォルトの名無しさん (ワッチョイ f768-NJTS)2019/10/13(日) 21:32:01.32ID:z6dVpON+0 連想配列の事をdictionaryって呼ぶんだっけか すごい便利だけど、シートあるんだからシート使った方がいいんでない?と思う 二次配列が目に見えて編集し放題とか楽ちんすぎる 0251デフォルトの名無しさん (アウアウエー Sadf-UHnC)2019/10/13(日) 21:38:36.38ID:a37CwINqa みんなどうやってVBAそんなに詳しくなったの? 0252デフォルトの名無しさん (ワッチョイ f77c-h29T)2019/10/13(日) 21:44:04.10ID:exOKfr5u0 必要に迫られて作ってるうちに 0253デフォルトの名無しさん (ワッチョイ 9f59-Sohv)2019/10/13(日) 21:48:31.98ID:TUjSthkJ0 休日まで費やして2000行くらいコード書いてるけどそろそろ嫌になってきた 0254デフォルトの名無しさん (ワッチョイ f768-NJTS)2019/10/13(日) 21:50:43.69ID:z6dVpON+0 そのうち、休日に働いて会社でのんびりするようになるよ あんまり良くないんだけど、プログラムは家じゃないと集中して掛けないんだよな 0255デフォルトの名無しさん (アウアウエー Sadf-UHnC)2019/10/13(日) 21:54:03.90ID:a37CwINqa>>254 あー、すごいよくわかる 0256デフォルトの名無しさん (アークセー Sxcb-FpGY)2019/10/13(日) 22:03:41.31ID:0JmSqCe7x>>248 平均的なVBAerってのがどんな層を指してるかちょっと分からないが、Dictionaryが理解できない人ってそもそも配列やCollectionも理解できないんじゃないの? 0257デフォルトの名無しさん (ワッチョイ b74b-x3kW)2019/10/13(日) 22:05:54.29ID:VDajUcWs0 dictionaryの替わりにシートを使うという発想は無かったな 0258デフォルトの名無しさん (アークセー Sxcb-FpGY)2019/10/13(日) 22:13:33.97ID:0JmSqCe7x シートが可視化された配列だってのはその通りなんだけど誰でもGUIで簡単に編集できてしまう点が逆に弱点でもある 値の読み書きだけでイベントハンドラに制御が渡るからそもそも重いし 0259デフォルトの名無しさん (ワッチョイ f768-NJTS)2019/10/13(日) 22:23:41.04ID:z6dVpON+0>>258 まぁねぇ。その辺は考えながらうまく付き合って行きたい所 0260デフォルトの名無しさん (ワッチョイ 9fa2-8cCB)2019/10/13(日) 22:44:44.65ID:Sc8Blp8e0 連想配列ってどういうとき便利なの? いまいち基本書の記述じゃメリットとか使い道とかがイメージできないんだけど 0261デフォルトの名無しさん (ワッチョイ f77c-h29T)2019/10/13(日) 23:07:03.97ID:exOKfr5u0>>260 配列で数字の添え字じゃなくて好きなワードを使いたい時に あとDictionaryの場合は検索がめちゃくちゃ速いから大量データの検索に 0262デフォルトの名無しさん (アウアウウー Sa5b-8cCB)2019/10/13(日) 23:09:26.19ID:YeAfr+Aea>>241 こういうこと? Sub 検索() Const COL_C As Long = 3 Const COL_F As Long = 6 Const COL_O As Long = 15 Dim nSetRow As Long nSetRow = 5 Dim nRow As Long For nRow = 5 To 17 If Not IsExistValue(Cells(nRow, COL_C).Value) Then Cells(nSetRow, COL_O).Value = Cells(nRow, COL_C).Value nSetRow = nSetRow + 1 End If Next For nRow = 5 To 21 If Not IsExistValue(Cells(nRow, COL_F).Value) Then Cells(nSetRow, COL_O).Value = Cells(nRow, COL_F).Value nSetRow = nSetRow + 1 End If Next End Sub 0263デフォルトの名無しさん (アウアウウー Sa5b-8cCB)2019/10/13(日) 23:09:42.80ID:YeAfr+Aea Function IsExistValue(ByVal pValue As Variant) As Boolean IsExistValue = True Const COL_Y As Long = 25 Dim nRow As Long For nRow = 5 To 25 If Cells(nRow, COL_Y).Value = pValue Then Exit Function End If Next IsExistValue = False End Function 0264デフォルトの名無しさん (ワッチョイ 9fea-+Z1Z)2019/10/13(日) 23:20:25.51ID:rkAEaYhN0>>260 Keywordが重複できないから必ず一意なデータセットができる。 0265デフォルトの名無しさん (ワッチョイ 9fe0-o74w)2019/10/14(月) 00:48:24.78ID:2bLpiP0X0 2シートを連結する際、それぞれの各行をクラスインスタンスに代入&コレクション化してるのですが連結方法に悩んでいます 例 Personクラス(pID, 氏名, 名字プロパティ, 生年月日,...)→Persons.Add Personインスタンス, str(pID) Diaryクラス(dID, pID, 作成日, 本文,...)→Diaries.Add Diaryインスタンス, str(dID) '出力 Dim d as Diary For each d in Diaries if(存在チェック) then xxx = Persons.Item(d.pID).名字 Next d