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
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だけで出来なかった気がするから面倒だな
150 名前:デフォルトの名無しさん (スプッッ Sdfa-XBvd) [2023/02/27(月) 23:06:45.60 ID:oBF60fgLd.net] そもそもFX側のプログラムから 記録用CSVなりに追記する形で出力にすればいいのでは 目的と手段を混同しているように見える
151 名前:デフォルトの名無しさん mailto:sage [2023/02/28(火) 10:02:05.35 ID:7Eonwnxx0.net] FX側はきっと既成のソフトウェアで手を入れられられず出力機能もないのだろう。 でなければマウスで幅を計測なんて、Excel抜きでも面倒な事をしてないと思う。 FX側ソフトウェアに要望を出す、別のものに変更する、または特注するのは有りだと思う。
152 名前:デフォルトの名無しさん mailto:sage [2023/02/28(火) 12:23:19.77 ID:nICQ8lOdr.net] B行に日付 C行以降は各項目 2023/4/3 パン 150 2023/4/16 米 500 2023/5/20 サラダ 230 ︙ 2023/8/13 牛乳 150 などと表があるとこから、VBAでinputboxで何月を取り出したいですか?など質問をして、その月だけを別シートに抽出したいのですが…findを使う? どうすればいいのか教えて頂きたいです。
153 名前:デフォルトの名無しさん [2023/02/28(火) 12:42:03.99 ID:O8AX5fZ9d.net] >>149 そいつがやるべきはVBAじゃなくFXソフトのお勉強からだな 少なくともメタトレーダー系ならExcelに対するVBAのようなプログラム制作用機能が充実してるから値幅計測ぐらいわけない
154 名前:デフォルトの名無しさん mailto:sage [2023/02/28(火) 15:14:30.22 ID:kIDllaukr.net] >>150 どうればいいのかって… VBAでinputboxで何月を取り出したいですか?など質問をして、その月だけを別シートに抽出してくださいってしか言えんだろ 具体的にコード出さないと何も言えない
155 名前:デフォルトの名無しさん [2023/02/28(火) 15:55:23.62 ID:d2Gt5PsA0.net BE:439992976-PLT(15000)] https://img.5ch.net/ico/u_sii_naname.gif VBAでやるよりピボットテーブルの方が・・・
156 名前:150 mailto:sage [2023/02/28(火) 15:57:37.64 ID:nICQ8lOdr.net] AutoFilterやCurrentRegion.copyで何とかなりました。 すみませんでした。
157 名前:デフォルトの名無しさん [2023/02/28(火) 17:32:55.16 ID:O8AX5fZ9d.net] もしかして:For まあ他人と共用するマクロなんだろうし その他人の中にマクロのことを聞けるやつもいないんだろうから 手作業をマクロで書いただけみたいなので正解かもしれんな
158 名前:デフォルトの名無しさん mailto:sage [2023/03/02(木) 03:38:03.48 ID:wSjrNglr0.net] 他人と共用するマクロは、共用している他人がマクロを編集できるので 自分がどう作っても他人が勝手に修正するだろうし・・・
159 名前:デフォルトの名無しさん mailto:sage [2023/03/02(木) 06:52:29.36 ID:J6gUWTNI0.net] >>156 事前に許可なく編集禁止と伝えておくのはどうでしょうか?? 自分の職場はトラブル防止のため注意喚起を徹底してます。
160 名前:デフォルトの名無しさん mailto:sage [2023/03/02(木) 14:19:36.36 ID:wSjrNglr0.net] マクロを作った人間の責任とサーバー上のファイルを管理している管理者 業務としてマクロを使う作業を指示している上司に変更内容を確認してもらう必要があるよね
161 名前:デフォルトの名無しさん mailto:sage [2023/03/04(土) 13:39:41.40 ID:hC7IXlBmd.net] >>132 ,134-137 遅くなったけど130です ありがとう 自分には日本語の変数のほうがわかりづらいし、>>137 の言うように万が一にも備えて英語に置き換えることにした
162 名前:デフォルトの名無しさん (ワッチョイ 7b66-QeO8) mailto:sage [2023/03/05(日) 14:08:33.99 ID:SCRVkcxh0.net] Public Sub aiueo() Dim Ary(2) As Variant Ary(0) = 10 Ary(1) = "文字列" Ary(2) = CDate("2021/2/2") Dim test As Variant test = Ary Call aiueo2(test) Call aiueo3(Ary()) End Sub Public Sub aiueo2(ByRef Ary As Variant) MsgBox TypeName(Ary) End Sub Public Sub aiueo3(ByRef Ary() As Variant) MsgBox TypeName(Ary()) End Sub 関数への配列をどう渡すかで悩んでいます。 配列として渡すのか、Variant型のスカラー変数にして渡すのか。 VBAのVariant変数は配列さえも入るスカラー変数だと認識しています。 なので、配列そのものを入れてるだけで、Variant型の配列変数とは少し違うと思っていました。 しかし上記の結果は同じでした。そうなってくると ど
163 名前:チちでもいいということなのでしょうか? もう一つ気付いたのはaiueo3はByVal渡しが出来ないけど、aiueo2ではByVal渡しが出来るので、 大元の配列の中身をいじらないで済むという違いがわかりました。 他に違いはありますか? [] [ここ壊れてます]
164 名前:デフォルトの名無しさん (ワッチョイ 1379-rvSK) mailto:sage [2023/03/05(日) 15:00:07.80 ID:RB9OOifa0.net] >>160 Variantの配列は結局Variantだから下のように配列指定の括弧を取って関数宣言すれば値渡しもできるよ Public Sub aiueo3(ByVal Ary As Variant) 関数引数の宣言で配列を受けるように書いてしまうと参照渡ししかできなくなるってだけ
165 名前:デフォルトの名無しさん mailto:sage [2023/03/05(日) 19:01:06.89 ID:ePQGVH9T0.net] >>160 そんなサンプルばっかり作ってないでちゃんと役に立つもの作ればいいのに
166 名前:160 mailto:sage [2023/03/05(日) 19:19:12.03 ID:SCRVkcxh0.net] >>161 ありがとうごございました。 スカラーで受けるか配列で受けるかにこだわっていました。 あれからもう一つ気付けたのは Public Sub Sample(Byref Ary() as Class1) Public Sub Sample(Byref Ary as Class1) この時に大きな違いが出ました。前者はAry(i).と書くだけでClass1のプロパティメソッド一覧がサジェストしてくれますが、 後者だとVBE的には配列と認識してないのでサジェストしてくれません。 これを決定打として前者の書き方に統一しようと思います。 >>162 8割出来てたソフトをクラスを導入して書き直したら拡張しやすいコードに生まれ変わると信じてトライ中です。 月に数日しか触る時間が取れなくてちっとも進んでないです。 久しぶりに触ると自分が書いたコードさえ複雑すぎて読めないです。