1 名前:デフォルトの名無しさん [2023/01/28(土) 12:12:12.41 ID:UjlIZ1Ov0.net] !extend:checked:vvvvv:1000:512 !extend:checked:vvvvv:1000:512 ↑同じ内容を3行貼り付けること ExcelのVBAに関する質問スレ コード書き込みや作成依頼もOK 次スレは>>980 が立てること 無理なら細かく安価指定 ※前スレ Excel VBA 質問スレ Part77 https://mevius.2ch.net/test/read.cgi/tech/1658009255/ Excel VBA 質問スレ Part78 https://mevius.2ch.net/test/read.cgi/tech/1667104996/ VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
49 名前:デフォルトの名無しさん mailto:sage [2023/02/03(金) 20:25:48.41 ID:6Slrjruv0.net] フィルターのボタンに↑↓とか表示されない?抽出とかだとロートの図が出てたり?
50 名前:デフォルトの名無しさん [2023/02/04(土) 01:29:18.62 ID:Wbq5qWPo0.net] >>38 そそ、 そういう「どっちの親でも使える」ようにするために そういう場合は継承は使わずに、移譲でやるのがいいんじゃないかと。 そもそもVBAじゃ厳密な意味の継承は使えないけどね。
51 名前:デフォルトの名無しさん mailto:sage [2023/02/04(土) 03:13:48.63 ID:5cp+GCIG0.net] 一次元配列の中に二次元配列を入れるのってシートから二次元配列として取り込まない限り無理ですか? 例えばa(2)って一次元配列を作って a(0)=cells(1,1).currentregion とした場合、a(0)(1,1)と格納されるよね。 一方、b(2)って一次元配列をつくってそこに2次元配列を格納しようとしてredim b(0)(100,100)って宣言してもエラーになるよね?
52 名前:デフォルトの名無しさん mailto:sage [2023/02/04(土) 03:22:13.04 ID:5cp+GCIG0.net] 特に複数のcsvを一次元配列ごとに二次元配列として取り込みたかったんたけど、それができなくて困ってます 0.csv→a(0)に二次元配列として格納 1.csv→a(1)に二次元配列として格納 2.csv→a(2)に二次元配列として格納 よくありそうなパターンですけどネットで調べても出てこなくて… 何かいいアイディアはあるでしょうか?
53 名前:デフォルトの名無しさん mailto:sage [2023/02/04(土) 06:12:27.84 ID:JIMr/Iwq0.net] >>52 csvを格納するならそのまま格納して取り出すときにsplitで配列化したらどうか。 デリミタ変えてcsvを繋げてあげれば擬似的に2次元配列に出来んじゃね?
54 名前:デフォルトの名無しさん mailto:sage [2023/02/04(土) 06:14:50.01 ID:JIMr/Iwq0.net] >>53 あるいはdirectoryのitemに2次元配列としてaddするか
55 名前:デフォルトの名無しさん mailto:sage [2023/02/04(土) 06:19:01.21 ID:JIMr/Iwq0.net] >>54 > >>53 >スマン。directoryじゃなくてdictionaryだw
56 名前:デフォルトの名無しさん mailto:sage [2023/02/04(土) 08:21:23.33 ID:XHbOUS2x0.net] >>48 その通りです。ネット検索しても出て来ないため、ここで聞いてみてどうかなと思いました。 >>49 さん仰るように矢印がボタンに表示されるので、何かあるはずと思ったのです。
57 名前:デフォルトの名無しさん mailto:sage [2023/02/04(土) 09:06:33.92 ID:YYLIzwcR0.net] >>45 ググっただけだけど Worksheet.AutoFilter.Sort.SortFields あたりを見ればわかるんじゃね? てかMSのDocsもこの辺りのドキュメントが貧相で困るわ
58 名前:デフォルトの名無しさん mailto:sage [2023/02/04(土) 09:14:10.73 ID:xQtdr6Ugd.net] >>45 AIさんからの天の声です Sub CheckSortOrder() Dim sortOrder As Boolean sortOrder = ActiveSheet.AutoFilter.Sort.SortOn If sortOrder = True Then MsgBox "The column is sorted in ascending order." Else MsgBox "The column is not sorted in ascending order." End If End Sub
59 名前:デフォルトの名無しさん (ワッチョイ 8fda-EOzK) mailto:sage [2023/02/04(土) 10:59:33.56 ID:mzRI23fF0.net] >>58 だからさ、そのコードが有効かどうかを、先ずはじぶんで検証しろよ ゴミコードだろうと何でも貼りゃあいいってもんじゃねーぞ △! オブジェクトは、このプロパティまたはメソッドをサポートしていません。だぞ おま環のせいで動作しないだけってか? 検証もしてない野良コードは世間の大迷惑 AIなら間違わないってか? 訊ねる人間側に問題あるからゴミコード吐くのに気付け
60 名前:デフォルトの名無しさん (スプッッ Sddf-D+99) mailto:sage [2023/02/04(土) 11:20:43.51 ID:EUGDlgP1d.net] >>59 そのコードを検証することは重要です。そのコードが有効かどうかは、まず自分で確認する必要があります。「AIなら間違わない」という考え方は誤りです。AIモデルはトレーニングデータから学習するだけであり、常に正確ではありません。野良コードを使用しても問題が起こる可能性があり、それが世間を混乱させることがあります。
61 名前:デフォルトの名無しさん (ワッチョイ 4f01-Rev0) mailto:sage [2023/02/04(土) 13:12:21.87 ID:sIc7L3oe0.net] >>53 「csvを格納するならそのまま格納して」って言うのが、まさにその方法を知りたいっていう質問でした Line Inputをつかって一行ずつ一次元配列に分割して、それを二次元配列に格納して、二次元配列の一次元目を増やして…ってのを繰り返すってのを考えました (二次元配列の一次元目を増やすプロシージャを作成する前提) ところがredim b(0)(100,100)という宣言自体がエラーになるのでどうしたものかと
62 名前:デフォルトの名無しさん mailto:sage [2023/02/04(土) 14:48:40.79 ID:JIMr/Iwq0.net] >>61 お役に立てたのならなによりっす。 でもその内容を聞いた感じだとcollectionかdictionaryを使ったほうがいい気もする。csvがどのくらいの文字数かわからんけど下手するとオーバーフローしそうな気が、、、 あとそもそもファイル操作で読み込むんじゃなくてPowerqueryとかでデータテーブル化してしまえば扱いやすい気も、、、あ、スマンね。いらぬお節介やった。
63 名前:デフォルトの名無しさん mailto:sage [2023/02/04(土) 18:22:34.02 ID:Av2vQos/0.net] >>61 そういうのって1次元の配列にCSVから作った2次元配列を足していくジャグ配列だよね a(b)(c,d)として使いたいってそういう事だよね CSVから2次元配列に落とす部分は自力で適当に作るしかないと思うよ
64 名前:デフォルトの名無しさん mailto:sage [2023/02/04(土) 19:42:17.96 ID:3xAEA7yN0.net] >>52 2次元配列を格納したバリアント型の1次元配列を使えばまあできるんじゃね
65 名前:デフォルトの名無しさん mailto:sage [2023/02/04(土) 22:05:52.42 ID:sIc7L3oe0.net] >>62 ジャグ配列はまさにその通りです! 色々調べてみたところ、Workbooks.OpenTextで一度新しいブックを開いて、そこをcurrentregionで二次元配列として取得するのが一番早そうでした シート一度貼り付けて、そこから取得するのがちょっとかっこ悪い気もしますが、コード的には一番楽のだと思うのでそれでいきたいと思います ありがとうごさいました!
66 名前:デフォルトの名無しさん mailto:sage [2023/02/04(土) 22:07:02.46 ID:sIc7L3oe0.net] >>63 すみません、安価こっちでした >>62 さんも>>64 さんもありがとうございました!
67 名前:デフォルトの名無しさん mailto:sage [2023/02/05(日) 06:12:14.98 ID:zxOMW0wY0.net] >>65 解決の糸口が見つかってよかったです。 シートに貼り付けるのは一見かっこ悪く見えるかもしれませんが、エクセルの場合シート自体が目視できる2次元配列みたいなものなのでデータ用のシートを用意しておくのはデバッグの意味でも有効と思います。 最終的に非表示にしておけばデータを変えて不具合が出たときに参照できますしね。
68 名前:デフォルトの名無しさん (ワッチョイ cf79-p19T) mailto:sage [2023/02/05(日) 17:55:21.75 ID:IrR7f/G90.net] シートに読み込ませてUsedRange.Valueで二次元配列を取得する場合はインデックスが1オリジンになるとこだけ注意
69 名前:デフォルトの名無しさん mailto:sage [2023/02/08(水) 13:33:38.06 ID:yPPt1d0+d.net] 名前の定義で範囲に名前をつけると数式で使用できますが、 VBAで自作関数を作り、その引数として定義した名前を使用するとエラーとなってしまいます。 一応定義した名前の後に&“”を付けて文字列化すればエラーを回避できるのですが、毎回これを入力するのは煩わしく見栄えも悪いのでできることならなんとかしたいのですが 解決策ありましたらご教示の程お願いいたします。
70 名前:デフォルトの名無しさん mailto:sage [2023/02/08(水) 14:59:06.65 ID:oAUh4t2x0.net] その関数のシグネチャとエラーメッセージぐらいかけよ
71 名前:デフォルトの名無しさん (アウアウウー Sa93-4QSx) [2023/02/08(水) 15:37:35.62 ID:FTgAG7p2a.net] 毎回やるならインターフェース関数作ればいいだけ
72 名前:デフォルトの名無しさん mailto:sage [2023/02/08(水) 20:18:25.84 ID:GAx9K2n2d.net] >>69 実現したいことがどんなことなのかわからないけど名前定義した範囲をRange型の変数にsetしてRange型のまま引数として渡しちゃいかんの?
73 名前:デフォルトの名無しさん (スップ Sd5f-dHSc) mailto:sage [2023/02/08(水) 23:15:53.95 ID:Gaz3gRVpd.net] 言葉でうまく説明できないので画像で説明させていただきます。 例えば引数の文字列に別の文字列をくっつけて返すだけのシンプルな関数を作ります。 当然引数にセルを指定すれば問題なく使用できます。 https://i.imgur.com/SnSyEby.png 次に、範囲に名前をつけてそれを引数として使用します。 https://i.imgur.com/6mcu5nn.png するとこのように「#VALUE!」エラーが出ます。 https://i.imgur.com/9NNr0sB.png ちなみに範囲の名前に&“”をつければ期待通りの結果になります。 https://i.imgur.com/haXX7gC.png と、SS撮ってて気づきましたが範囲の中から同じ行のセルを選んで渡す必要があるのですね。 VLOOKUPの第一引数なんかで同じことをすると自動的に同じ行だけを渡せるので勘違いしていました。
74 名前:デフォルトの名無しさん [2023/02/09(木) 07:05:59.22 ID:bJr31kU+0.net] >>73 検証してないので的外れかもしれないけどたぶんRangeのデフォルト値の問題かと。 うろ覚えだけどvariant型で渡されているからセル単体を引数で渡すとセル内容の値の型(今回はstring型)を渡すけど 複数セルを渡すとrange型のオブジェクトとして渡されてるんじゃないかな。 なので自身で書かれているようにセルを特定してあげないといけないのだと思う。
75 名前:デフォルトの名無しさん mailto:sage [2023/02/09(木) 23:30:18.42 ID:TUokDGw70.net] >>73 >範囲の名前に&“”をつければ期待通りの結果になります のがおかしい気がするんだが。実際こっちで検証してもエラーになってる ちょっと環境書いてみて
76 名前:デフォルトの名無しさん (ワッチョイ fa3d-n4dK) mailto:sage [2023/02/13(月) 03:20:36.33 ID:COtuPGR00.net] Sub test() a = 0.2 b = 0.4 If a + b = 0.6 Then Debug.Print "A" Else Debug.Print "B" End If End Sub これってAじゃね?
77 名前:デフォルトの名無しさん [2023/02/13(月) 07:05:23.93 ID:HpzJjAlxd.net] >>76 Excelでは少数を厳密には表現できないから 0.1と書いても実際の値には0.12...みたいなのが入る そのズレた値同士の足し算をズレた値と比べるからガタガタで合わなくなる
78 名前:デフォルトの名無しさん [2023/02/13(月) 07:53:01.46 ID:/kiwbSJJ0.net] >>76 きちんと型宣言すればちゃんと計算できる 詳しくは下を見た方が早い https://excel-ubara.com/excelvba4/EXCEL_VBA_427.html#:~:text=Single%EF%BC%88%E5%8D%98%E7%B2%BE%E5%BA%A6%E6%B5%AE%E5%8B%95%E5%B0%8F%E6%95%B0%E7%82%B9%E6%95%B0%E5%9E%8B%EF%BC%89%E3%81%AF4%E3%83%90%E3%82%A4%E3%83%88,%E7%99%BA%E7%94%9F%E3%81%97%E3%81%A6%E3%81%97%E3%81%BE%E3%81%84%E3%81%BE%E3%81%99%E3%80%82
79 名前:デフォルトの名無しさん [2023/02/13(月) 10:13:40.33 ID:QGUistpWa.net] >>76 ほんとだよく気付いたね って言ってほしいのか?
80 名前:デフォルトの名無しさん [2023/02/13(月) 10:18:31.40 ID:86tN/4J60.net] すみません、マクロスレに誘導されてきました。教えてください 【1 OSの種類 .】 Windows** 【2 Excelのバージョン 】 Excel16.0 【3 VBAが使えるか .】 はい 【4 VBAでの回答の可否】 可 ◆やりたいこと データモデルに値を格納し接続先を作成している その接続先にあるリストを、検索フォーム、コンボボックスなどのデータソースにしたい ◆補足情報とし調べがついてること ・ピボットテーブルにはビボットテーブル→データモデルからで設定できた ・選択リストもINDIRECT関数で設定できた ・コンボボックスや検索フォームは、RowSourceTypeにテーブルクエリーを設定 ・RowSourceプロパティにテーブル名を設定 ここまではわかっていますが、うまく設定ができません 具体的には、下記コードでエラーが出ます 実行時エラー‘13’ 型が一致しません エラーの出たコード Privets Sub UserForm1 Initialize() { Me.ComboBox1.RowSourceType = “Table/Query” Me.ComboBox1.RowSource = “syamei1” } 上記のコードの書き方、サンプルコードがあれば教えて下さい。よろしくお願いします
81 名前:デフォルトの名無しさん [2023/02/13(月) 10:21:58.10 ID:86tN/4J60.net] 連投すみません コンボボックスじゃなくても構いません やりたいことは大量のデータをもとに入力用のポップアップウインドウを作りたいです レコードが合計で100万以上あり、重たくなるのを避けるために、データモデルの概念を知り、それで入力フォームを作ろうとしています その方法でコンボボックスを見つけましたが、元となるデータソースがデータモデルの接続先から選べるなら、コンボボックスの形式じゃなくても構いません 入力規則で選択リストの値を持ってくることはできましたが、レコード件数が多いので、フォームで出したいと思っています よろしくお願いします
82 名前:デフォルトの名無しさん (アウアウウー Sa4f-qaxQ) [2023/02/13(月) 11:40:19.98 ID:GyFZ7uvya.net] Privets ?
83 名前:デフォルトの名無しさん [2023/02/13(月) 14:18:20.91 ID:86tN/4J60.net] スマホ手打ちなので誤字は勘弁を
84 名前:デフォルトの名無しさん mailto:sage [2023/02/13(月) 17:29:24.70 ID:pezzuKY30.net] スマホで5ちゃん見てる人も多くなったのか
85 名前:デフォルトの名無しさん [2023/02/14(火) 11:37:45.99 ID:nNkhowbBa.net] 拙者も携帯なので試せないでござるよ
86 名前:デフォルトの名無しさん [2023/02/14(火) 13:19:18.08 ID:YTnfnco6a.net] 現場で使えるテクニック満載のVBAの本を教えて下さい。
87 名前:デフォルトの名無しさん mailto:sage [2023/02/14(火) 22:18:21.54 ID:h0+uN4JM0.net] 見てどうする? 現場に活かせるとは限らんぞ
88 名前:デフォルトの名無しさん (ワッチョイ aff9-UHi0) [2023/02/15(水) 09:38:23.37 ID:dWAC20qI0.net] syamei1ってテーブルを指定してるようだけど ちゃんとテーブルが存在してるの? RowSourceでクエリやsql指定してみたら?
89 名前:デフォルトの名無しさん (ワッチョイ deda-D0vN) mailto:sage [2023/02/15(水) 19:02:02.67 ID:8XlBz3tg0.net] >>87 活かせる現場に転職するんじゃね
90 名前:デフォルトの名無しさん (ワッチョイ c619-xn9B) [2023/02/15(水) 19:27:38.40 ID:HlAv3bv30.net] ネットが見れない環境なんかね? 銀行系ではよくある話だけど
91 名前:デフォルトの名無しさん (ワッチョイ 0710-hSWQ) mailto:sage [2023/02/15(水) 19:39:09.60 ID:UoMCmZrt0.net] 絆創膏テクニック的な本はたくさん出ているでしょ
92 名前:デフォルトの名無しさん mailto:sage [2023/02/15(水) 20:32:13.82 ID:8XlBz3tg0.net] 銀行でお金の計算を初心者が本見ながらEXCELのVBAで作ってるとか そんな銀行やばくね
93 名前:デフォルトの名無しさん mailto:sage [2023/02/16(木) 02:33:56.63 ID:v5+0ZrcQ0.net] ヤバいよそれは。 思い出したけど、どこかの銀行がATMの不具合出した事故を思い出したわ。 それと同じようなトラブルになるのでは?
94 名前:デフォルトの名無しさん [2023/02/16(木) 14:14:15.80 ID:TeVuhO500.net] Excel 365なんだが ActiveXのコンボボックスをシートに配置すると ブックを閉じるときにコンボボックスのChangeイベントが発生して Changeイベントのコードが実行されるんだが、なんで閉じるときに発生するん? バグじゃねーの?
95 名前:デフォルトの名無しさん [2023/02/16(木) 17:40:38.79 ID:ImcZX1+Nd.net] アクティブXコントロールでボタン作ると、ボタン押した時にボタン内の文字が左に寄るのですが、これは治せるのでしょうか?
96 名前:デフォルトの名無しさん mailto:sage [2023/02/16(木) 17:44:23.49 ID:IvN11mYG0.net] ActiveXオブジェクトは、自分(Application)のオブジェクトに見えても、実は外部のオブジェクトです Application イベントの扱いで記述不足や漏れが無いか、プロパティの見直しなどしてみるかコードを貼ってみるなり
97 名前:デフォルトの名無しさん (ワッチョイ 0710-hSWQ) mailto:sage [2023/02/16(木) 20:35:33.62 ID:v5+0ZrcQ0.net] ActiveXってExcelで使わない方が良いみたいな記事(日経PC)で見た記憶ある
98 名前:デフォルトの名無しさん [2023/02/17(金) 07:12:43.98 ID:WORa0xXL0.net] ActiveXはExcelシートで使うもんじゃないってのは今でも定石!
99 名前:デフォルトの名無しさん [2023/02/17(金) 10:04:33.80 ID:o2LVTB4Vd.net] https://answers.microsoft.com/ja-jp/msoffice/forum/all/office-2016-の-activex/81aa0b17-2f60-49c3-83f7-02c164969f7c Excel2016のバグなんですね
100 名前:デフォルトの名無しさん [2023/02/17(金) 10:05:10.85 ID:o2LVTB4Vd.net] https://answers.microsoft.com/ja-jp/msoffice/forum/all/office-2016-の-activex/81aa0b17-2f60-49c3-83f7-02c164969f7c
101 名前:デフォルトの名無しさん mailto:sage [2023/02/17(金) 10:15:37.69 ID:znCeXLfL0.net] そんな古いVer使い続けるなよ スタンドアロンで一台こっきりならまだしも
102 名前:デフォルトの名無しさん mailto:sage [2023/02/17(金) 15:42:35.67 ID:WFsPqw+S0.net] 検索で例えば「あ」という文字をすべて探し出して その一文字前を選択したいんですがどうすればいいですか? Selection.Find .Text = "あ" Selection.Words.First.Previous.Select としてみましたがうまく行きませんでした カーソルのある前の文字が選択されます
103 名前:デフォルトの名無しさん mailto:sage [2023/02/17(金) 16:30:19.83 ID:KwkbTkoud.net] >>102 複数の選択ができると思ってんのか?
104 名前:デフォルトの名無しさん mailto:sage [2023/02/17(金) 17:31:12.72 ID:WFsPqw+S0.net] >>103 できないんですね…VBA触ったの今日が初めてなもので 最終的には"あ"の一文字前だけをフォント変更したいんですがどういう実装ならできそうか分かりませんか?
105 名前:デフォルトの名無しさん mailto:sage [2023/02/17(金) 20:35:48.06 ID:clT0gqvf0.net] >>104 自分なら検索して見つかったセル毎に 「あ」が何文字目にあるかを取得し、 その1文字前のフォントを変更するというふうに組む。
106 名前:デフォルトの名無しさん (ワッチョイ 4600-XLfl) mailto:sage [2023/02/17(金) 20:59:53.94 ID:WFsPqw+S0.net] >>105 ありがとうございます けど"あ"が複数あるセルも多いので…複数回走査したらループ終わらなくなりますし "あ"は目印として入れてあるだけで最後にまとめて消すつもりだったんですが 一回フォント変更の処理したらそこの"あ"を消しても
107 名前:、一度検索がいいんでしょうか… [] [ここ壊れてます]
108 名前:デフォルトの名無しさん [2023/02/17(金) 22:23:30.64 ID:v2XGnFXnd.net] >>106 Mid( Range.value, x)で セル内のx文字目から後ろを切り出せる Instr( Mid( Range.value, x), z)で セル内のx文字目から切り出した中で文字列zが何文字目にくるのか知ることができる Range.characters(x, y).Fontで セル内のx文字目からy文字分みたいな一部指定でのフォント変更が出来る これらのxやyをForで変更しながら処理すればいけると思う
109 名前:デフォルトの名無しさん (ワッチョイ 4600-XLfl) mailto:sage [2023/02/17(金) 22:57:47.99 ID:WFsPqw+S0.net] >>107 あああなるほどなるほど 仰ってる意味はギリわかるんですけどコードいじるのほぼ10年ぶりとかなんでハードル高い~~~ どうにかがんばってみます…… ありがとうございました
110 名前:デフォルトの名無しさん mailto:sage [2023/02/18(土) 11:21:39.71 ID:wyxXLbRL0.net] >>108 コードを書いてみた。 所定のフォントを変えた後、最後にまとめて「あ」を空白に置換させている。 Sub findあ() Dim foundcell As Range, firstcell As Range, target As Range, Num As Long, flag As Boolean Set foundcell = Cells.find(What:="あ") If foundcell Is Nothing Then Exit Sub Set firstcell = foundcell:Set target = foundcell Do Num = InStr(foundcell, "あ") If Num > 1 Then flag = False Do If flag = False Then Num = 0 Num = InStr(Num + 1, foundcell, "あ") If Num = 0 Then Exit Do foundcell.Characters(Start:=Num - 1, Length:=1).Font.Name = "BIZ UDゴシック":flag = True Loop End If Set target = Union(target, foundcell) Set foundcell = Cells.FindNext(foundcell) Loop Until foundcell.Address = firstcell.Address target.Replace What:="あ", Replacement:="" End Sub
111 名前:109 mailto:sage [2023/02/18(土) 11:39:38.68 ID:wyxXLbRL0.net] 途中で書き込んでしまったので もし使うならインデント調整して下さい
112 名前:デフォルトの名無しさん mailto:sage [2023/02/18(土) 18:22:51.48 ID:oiEmQBhiM.net] >>109-110 ご親切にありがとうございます!! 有り難く使わせていただきます
113 名前:デフォルトの名無しさん [2023/02/19(日) 13:44:33.87 ID:E1njzG6f0.net] 次のようにA列にid番号、B列に削除されるid番号あります。 A,B 1,3 2,5 3,7 4, 5, 6, 7, 8, 9, C列にAからBの番号を除外したものが残ります。 C, 1 2 4 8 9 これを実現するのに、みなさんならセル関数を使いますか?VBAを使いますか?
114 名前:デフォルトの名無しさん [2023/02/19(日) 14:09:46.37 ID:fQjaN3Vg0.net] バージョンは
115 名前:デフォルトの名無しさん mailto:sage [2023/02/19(日) 14:50:51.24 ID:E1njzG6f0.net] ver2019です。
116 名前:デフォルトの名無しさん (ワッチョイ 2342-rjXQ) mailto:sage [2023/02/19(日) 15:46:46.73 ID:IrwBul5G0.net] 手動も含めて一番都合がいいのを使う
117 名前:デフォルトの名無しさん mailto:sage [2023/02/19(日) 16:33:34.29 ID:E1njzG6f0.net] ありがとうございます。慣れないですがVBAで行うことにしました。
118 名前:デフォルトの名無しさん [2023/02/19(日) 16:36:15.42 ID:E1njzG6f0.net] 以下の実行が通りません。 If init_id(i) = del_id(j) Then の個所でインデックスの範囲外というエラーがでました。 配列に対して添字を()しているのが問題でしょうか? Sub 次の問題() Dim totalQuestions As Long, pastQuestions As Long, Nextnum As Long, n As Long Dim init_id() As Variant, del_id() As Variant totalQuestions = Worksheets("Play").Cells(Rows.Count, 1).End(xlUp).Row - 1 Randomize Nextnum = Int(totalQuestions * Rnd + 1) n = Worksheets("arrData").Cells(Rows.Count, "B").End(xlUp).Row + 1 Worksheets("arrData").Cells(n, "B") = Nextnum init_id = Worksheets("Play").Range(Worksheets("Play").Cells(2, 1), Worksheets("Play").Cells(totalQuestions + 1, 1)).Value pastQuestions = Worksheets("arrData").Cells(Rows.Count, 2).End(xlUp).Row - 1 del_id = Worksheets("arrData").Range(Worksheets("arrData").Cells(2, 2), Worksheets("arrData").Cells(pastQuestions + 1, 2)).Value Dim i As Integer,
119 名前:j As Integer For i = 1 To totalQuestions For j = 1 To pastQuestions If init_id(i) = del_id(j) Then Debug.Print init_id(i).Value End If Next j Next i End Sub [] [ここ壊れてます]
120 名前:デフォルトの名無しさん mailto:sage [2023/02/19(日) 16:40:27.54 ID:E1njzG6f0.net] 念のため、chatGTPはあてにならなかったです。
121 名前:デフォルトの名無しさん (ワッチョイ 4bda-BTrK) mailto:sage [2023/02/19(日) 17:24:19.98 ID:ZehIwlnC0.net] >>117 Integerだからだろ
122 名前:デフォルトの名無しさん (ワッチョイ 2302-3nnD) mailto:sage [2023/02/19(日) 17:30:57.52 ID:E1njzG6f0.net] ありがとうございます。Longにしてもダメでした。 根本的に配列の扱いが間違っているような感じですが、 それがよくわかりません。
123 名前:デフォルトの名無しさん (ワッチョイ 1501-rVJW) [2023/02/19(日) 17:39:18.41 ID:j3UrUaev0.net] >>120 init_id = Worksheets("Play").Range(Worksheets("Play").Cells(2, 1), Worksheets("Play").Cells(totalQuestions + 1, 1)).Value と del_id = Worksheets("arrData").Range(Worksheets("arrData").Cells(2, 2), Worksheets("arrData").Cells(pastQuestions + 1, 2)).Value でinit_idとdel_idにセルの値を配列として代入しているけど、これは2次元配列として代入している だからinit_id(i)という一次元配列は存在しない init_id(1,1)とかinit_id(2,1)の二次元配列として存在している よってinit_id(i)は存在しませんってエラーが出てる ローカルウインドで確認するといい
124 名前:デフォルトの名無しさん mailto:sage [2023/02/19(日) 17:44:28.85 ID:E1njzG6f0.net] ありがとうございました。よくわかりました。 なんとか1次元の配列を作りたいと思います。 セルデータから簡単に配列つくれるということでこの作り方になったのですが。 列番号を1つにすれば1次になるかと浅はかでした。。
125 名前:デフォルトの名無しさん mailto:sage [2023/02/19(日) 18:07:25.25 ID:xzOvW7kvd.net] 配列よりDictionaryの存在チェックで判定する方が簡単そうだけどなぁ
126 名前:デフォルトの名無しさん mailto:sage [2023/02/19(日) 18:17:57.66 ID:FtkTxk830.net] >>112 VBAならこんな感じか。 後、C列に6がないのは記入漏れ? Sub C列に書く() Dim i As Long, cnt As Long, dRange As Range Set dRange = Range("B1:B3") cnt = 1 For i = 1 To 9 If WorksheetFunction.CountIf(dRange, Cells(i, 1)) = 0 Then Cells(cnt, 3) = Cells(i, 1) cnt = cnt + 1 End If Next i End Sub
127 名前:デフォルトの名無しさん mailto:sage [2023/02/19(日) 18:24:49.89 ID:E1njzG6f0.net] >>124 ありがとうございます。やろうとしていたコードよりシンプルです。
128 名前:デフォルトの名無しさん mailto:sage [2023/02/19(日) 18:28:42.83 ID:E1njzG6f0.net] >>124 でおしえていただいた方法で進めたいのですが。 これで、エラーがでたのはなぜでしょう? Sub 次の問題() Dim totalQuestions As Long, pastQuestions As Long, Nextnum As Long, n As Long Dim init_id() As Variant, del_id() As Variant totalQuestions = Worksheets("Play").Cells(Rows.Count, 1).End(xlUp).Row - 1 Randomize Nextnum = Int(totalQuestions * Rnd + 1) n = Worksheets("arrData").Cells(Rows.Count, "B").End(xlUp).Row + 1 Worksheets("arrData").Cells(n, "B") = Nextnum pastQuestions = Worksheets("arrData").Cells(Rows.Count, 2).End(xlUp).Row - 1 Dim i As Integer For i = 1 To totalQuestions init_id(i) = Worksheets("Play").Cells(i+1, 1) Next i For i = 1 To pastQuestions del_id(i) = Worksheets("Play").Cells(i+1, 1) Next i End Sub
129 名前:デフォルトの名無しさん mailto:sage [2023/02/19(日) 20:06:54.10 ID:owAZbnPUd.net] 春休みか?
130 名前:デフォルトの名無しさん mailto:sage [2023/02/19(日) 20:22:10.83 ID:j3UrUaev0.net] これ流石に釣りだろ いつものキチガイ臭がすごいわ
131 名前:デフォルトの名無しさん mailto:sage [2023/02/20(月) 01:12:29.14 ID:CLcJ/prP0.net] また荒らしか。
132 名前:デフォルトの名無しさん [2023/02/25(土) 22:54:00.85 ID:IaGdb0E30.net] VBA初心者です 退職済みの前任者が作ったマクロで多発してるエラー対応をしています Dim 範囲 As Range Set 範囲 = Worksheets(″Sheet1″).Range(″A1″).CurrentRegion ・変数に日本語を使うメリットとデメリット ・Range型の変数を使うメリットとデメリット 教えてもらえないでしょうか?
133 名前:デフォルトの名無しさん [2023/02/25(土) 23:47:26.72 ID:tG3tii0/d.net] >>130 お前のレベルで手を出すな
134 名前:デフォルトの名無しさん mailto:sage [2023/02/25(土) 23:51:02.20 ID:apv923pv0.net] 聞いたこともない英単語だとかえってわからなくなるからいっそ日本語の方がいい時がある(語学力の問題)
135 名前:デフォルトの名無しさん mailto:sage [2023/02/26(日) 00:31:12.73 ID:/hhgnOlt0.net] >>130 前任者がつくったとかいうのは関係なく、エラーを直して正常に動くようにするのは今の担当者の仕事じゃね 日本語を問題にするなら好きな言葉に置き換えればいいだろう
136 名前:デフォルトの名無しさん mailto:sage [2023/02/26(日) 05:08:45.75 ID:eudL/KWJ0.net] 昔は確かに日本語変数だと変な挙動起きたがな。
137 名前:デフォルトの名無しさん mailto:sage [2023/02/26(日) 10:08:54.14 ID:B6f81u3Mr.net] 日本語のメリット 人によっては視覚的に分かりやすい デメリット その度に切り替えボタンを押すのが面倒 後任者が分かりやすいように日本語にしといてくれたんだろう
138 名前:デフォルトの名無しさん [2023/02/26(日) 10:54:07.84 ID:/hhgnOlt0.net] 値1 と 値1 が混ざって変数宣言を省略してるとか 漢字の間違いや全角の空白が紛れてたこともあったな昔のことだが
139 名前:デフォルトの名無しさん mailto:sage [2023/02/26(日) 12:24:12.13 ID:nvWXChWd0.net] ついこの間、ExcelのupdateでまたVBAが壊れたので 変数はもちろん、ワークシートから引っ張ってくるシート名や定義名も 日本語は止めた。
140 名前:デフォルトの名無しさん mailto:sage [2023/02/26(日) 12:27:06.36 ID:pTLOSYzf0.net] Excelって非アクティブからクリックでアクティブにするとき、クリックしたセルが一発でアクティブにならんのな 前回操作時のセルがアクティブなる デュアルモニターでマウス行ったり来たりしてExcel入力してるから面倒くさいったりゃありゃしない スプレッドシートは問題ないんだけどさ スレチだったらすまん
141 名前:デフォルトの名無しさん [2023/02/26(日) 13:44:06.75 ID:2K5zmO2D0.net] 非アクティブのウィンドウにマウスをもっていったら自動的にアクティブになる 無料のユーティリティソフトを入れたらいいんじゃね
142 名前:デフォルトの名無しさん mailto:sage [2023/02/26(日) 14:26:11.23 ID:pTLOSYzf0.net] >>139 Windowsにその機能あるんだが、普段の使用で使いにくいんだよな 意図しないウィンドウがアクティブになってりして とりあえずスプレッドシートのほう使うよにしたわ
143 名前:デフォルトの名無しさん (ワッチョイ da79-Arif) mailto:sage [2023/02/26(日) 20:33:51.43 ID:gahU4Yv80.net] 効率を語るならまずマウス操作を止めるべきだな
144 名前:デフォルトの名無しさん (オッペケ Sr75-WNy4) mailto:sage [2023/02/26(日) 21:30:42.93 ID:IOZzQyLPr.net] 流石にエクセルのセルをクリックで操作は意味不明だろ そこに文句言うヤツとか誰も想定してないと思うわ
145 名前:デフォルトの名無しさん (ワッチョイ 9d5f-kDor) mailto:sage [2023/02/26(日) 21:41:09.74 ID:pTLOSYzf0.net] いや、デュアルモニターの隣りの画面でFXのチャートの値幅をマウス操作で計測し、その値を隣の画面のExcelに打ち込んでデータ分析してるんだが…… 一回入力するたびに隣の画面にポインタ移動するから、そのたびExcelが非アクティブになるんだよ なんか俺めんどくさいことしてるのかな……? まあ、これ以上はスレチになるからここで終わりにしておく すまんかった
146 名前:デフォルトの名無しさん (ワッチョイ 5a02-ZYAP) [2023/02/26(日) 22:07:07.64 ID:6/0OFtJ50.net] これじゃダメかい? Private Sub Workbook_SheetActivate(ByVal Sh As Object) Sh.Selection.Active End Sub
147 名前:デフォルトの名無しさん (ワッチョイ 9d5f-kDor) mailto:sage [2023/02/26(日) 23:34:16.33 ID:pTLOSYzf0.net] >>144 うまくできんかった。 chatGPTでもマクロを教えてもらったが、そっちも機能せず もしかしたらオマカンかもしれん だからスプレッドシート使うことにした わざわざすまんかった ありがとう
148 名前:デフォルトの名無しさん (オッペケ Sr75-WNy4) mailto:sage [2023/02/27(月) 01:12:31.98 ID:ykCEF1qar.net] ん?よくわからんけど、vba起動したら別のソフトがアクティブになるってこと? 別のソフトをアクティブにする前にに次に使いたいセルをSelectかActivateにしとけばいいんでない? そもそもセルに手打ちってのもよくわからんけど
149 名前:デフォルトの名無しさん mailto:sage [2023/02/27(月) 20:02:31.12 ID:Akgqa2X30.net] >>138 エクセルのアクティブ化とアクティブセルの変更を1クリックでやりたいって話だろ デュアルモニターとか関係ない Activate系のイベントでマウスカーソルの位置拾ってセル位置判定してアクティブ化するマクロを書けばできる気はする マウスカーソルの位置ひらうのがVBAだけで出来なかった気がするから面倒だな