Excel VBA 質問スレ Part52
: デフォルトの名無しさん [] 2018/01/27(土) 20:25:05.67:Xe+uGT7T スレ立ての際は一行目に !extend:checked:vvvvv:1000:512 と入れてスレ立てして下さい ExcelのVBAに関する質問スレです コード書き込みや作成依頼もOK ※関連スレ VBAなんでも質問スレ Part2 ttp://mevius.2ch.net/test/read.cgi/tech/1432173164/ Access VBA 質問スレ Part1 ttp://mevius.2ch.net/test/read.cgi/tech/1328536426/ ※前スレ Excel VBA 質問スレ Part51 ttp://mevius.2ch.net/test/read.cgi/tech/1510107990/ : デフォルトの名無しさん [sage] 2018/01/27(土) 20:26:07.63:Xe+uGT7T あとこれ Excel Python 質問スレ ttp://mevius.2ch.net/test/read.cgi/tech/1517018055/ : デフォルトの名無しさん [sage] 2018/01/27(土) 20:37:51.59:U6WUbfXx ほす : デフォルトの名無しさん [] 2018/01/27(土) 20:40:42.16:v1Vq7O9g よう無能wスレ立ても満足にできんのかw : デフォルトの名無しさん [sage] 2018/01/27(土) 20:44:44.53:Xe+uGT7T ならお前が立て直せや無能 そしたら削除依頼だしてくるわ : デフォルトの名無しさん [sage] 2018/01/27(土) 21:18:02.81:U6WUbfXx これはあれか、メゾット君か パイソンスレでも暴れてるけど 笑えるわ : デフォルトの名無しさん [] 2018/01/27(土) 22:30:19.28:v1Vq7O9g ようメゾット君w久しぶりやなw : デフォルトの名無しさん [sage] 2018/01/27(土) 22:56:24.41:845Tmzax はよ立て直せよヘタレ : デフォルトの名無しさん [sage] 2018/01/27(土) 23:22:14.86:cbFXqoc1 うんこ擦り付けるのやめてもらえませんかね : デフォルトの名無しさん [sage] 2018/01/27(土) 23:32:58.75:mMQhkopa メゾット君は恥じるって感情を持ち合わせている割に自分より上位の人間に勝てない喧嘩売るのは辞めないってのが不思議 : デフォルトの名無しさん [] 2018/01/27(土) 23:46:41.45:v1Vq7O9g キミが下位の人間()だから喧嘩売られるんだよw 不思議でもなんでもないよメゾット君w : デフォルトの名無しさん [sage] 2018/01/27(土) 23:48:38.90:cbFXqoc1 何が下位で何が上位なのか教えてくれよ 言葉の定義揃えてもらえないとわからないバカだから説明してくれ : デフォルトの名無しさん [] 2018/01/27(土) 23:51:36.98:v1Vq7O9g それは上位の人間()を定義した?に聞いたらバカさん : デフォルトの名無しさん [sage] 2018/01/27(土) 23:55:56.46:cbFXqoc1 いや、それに反論した君もその定義を理解してるんだろ? : デフォルトの名無しさん [] 2018/01/27(土) 23:58:06.82:v1Vq7O9g 馬鹿にしてるだけなんですけどw 逆に聞くけどキミは上位の人間とか本当にあると思ってるの?バカさん : デフォルトの名無しさん [sage] 2018/01/28(日) 00:01:24.71:tSF66yjC じゃあ何が上位で何が下位かわからずに噛みついてるってことだね それがわかれば満足だわ、ありがとう : デフォルトの名無しさん [] 2018/01/28(日) 00:03:07.53:8+IXgyMg あのー、馬鹿にしてるってハッキリ言ったよね?w 人の話ちゃんと聞こうよバカさんw : デフォルトの名無しさん [sage] 2018/01/28(日) 00:06:37.18:tSF66yjC 定義もわからんでバカにするってどう言うことなのかよくわからんわ メゾット君本人でもなけりゃなんも気にならないと思うんだけど とにかく、そこはわかってないということはわかったからそれ以上興味ないわ : デフォルトの名無しさん [sage] 2018/01/28(日) 00:07:58.80:mZQyM07n いや、メゾット君はVBAのコードを読み書き出来ないんだから、このスレでは初歩的な事を聞いてくる初心者より下位やぞ : デフォルトの名無しさん [] 2018/01/28(日) 00:12:08.48:BSlLksGg そりゃキミがバカなんだからわかるわけないよバカさんw 面白い事言うね!さすがバカさんw : デフォルトの名無しさん [sage] 2018/01/28(日) 00:13:56.37:tSF66yjC 具体的に : デフォルトの名無しさん [] 2018/01/28(日) 00:18:17.28:8+IXgyMg むしろキミが具体的にキミ自身がバカだと考える理由を説明してくれよバカさんw ボクはキミの自己紹介を尊重してるだけだよバカさんw : デフォルトの名無しさん [sage] 2018/01/28(日) 00:22:13.43:NUwCXosq ほならね理論で草 : デフォルトの名無しさん [sage] 2018/01/28(日) 00:26:24.39:tSF66yjC それはその時のレスそのままの意味だよ : デフォルトの名無しさん [sage] 2018/01/28(日) 12:43:11.93:iOPSu+uz メゾット君1とはなんぞや : デフォルトの名無しさん [] 2018/01/28(日) 13:52:51.41:8+IXgyMg 無能ののことなんじゃね?しらんけど : デフォルトの名無しさん [sage] 2018/01/28(日) 14:14:41.52:XZzu/jLR ここまで何の技術も質問も無い件 : デフォルトの名無しさん [sage] 2018/01/28(日) 16:29:29.49:mZQyM07n メゾット君とはプログラミングについての知識が一切無いにも関わらず、このスレに三年ほど前から張り付いていて、 具体性の無い罵詈雑言をレスし続けている名無しの一人 Methodの読み方が分からず「メゾット」と呼んだ事が名称の由来 まともな社会経験が無い為なのか、実用性が極端に薄い独特な思考法で会話をしようとする為、 回線を三つほど使い回して自演している時でも本人と特定出来てしまう 偶然映り込むよう装ってロレックスの腕時計を見せびらかすように写メに撮ってみたり(映り込み方は非常に不自然)、 プログラミングの本を読んで「変数」という概念の存在を数時間で認知できたことを褒めて欲しいと再三強調したり、 どうも虚栄心が異様に強い傾向にあるらしいが、現実では満たされない為に、このスレで他人を罵倒して鬱憤を晴らしてる様だ 平日の日中は反応が無い事が多いので労働に従事しているらしい事が見受けられるが、 中古と思われる書籍しか購入していないなど、知識に対する評価が低い点から見て、社会的地位が低い仕事だと思われる メゾット君であるかどうかに関わらず、具体的な指摘、コードの付与がないレスはスルーする事をお勧めする : デフォルトの名無しさん [] 2018/01/28(日) 17:09:44.50:8+IXgyMg あれ?レス番飛んでるけどメゾット君何かレスしたの? : デフォルトの名無しさん [sage] 2018/01/28(日) 18:08:50.22:xEeIgRKG スレ保守のついでに相手してやったのよ 以後はスルーするつもり : デフォルトの名無しさん [sage] 2018/01/30(火) 03:46:22.71:kllVg4gx 2点質問いいでしょうか 1.下記コードのコメントアウトで挟んだ部分の実行時間を短縮したいのですが何かいい方法はありますか? やりたいことは各セルに@区切りで3つのランダムな数字が入った状態から、その3つの数字で入力規則のドロップダウンリスト作成→1つ目選択です(実際は1万セル前後あります) 2.複数回実行した時にかかる時間が増えていくのは何故でしょうか? Excel2016です、よろしくお願いします Option Explicit Dim i As Long, start As Long, num As String, area As Variant Sub test() start = Timer area = Range("B3:B5003") For i = 1 To UBound(area) area(i, 1) = Int(Rnd * 1000) & "@" & Int(Rnd * 1000) & "@" & Int(Rnd * 1000) Next i Range("B3:B5003") = area '////////// For i = 3 To 5003 num = Replace(Range("B" & i), "@", ",") With Range("B" & i).Validation .Delete .Add Type: = xlValidateList, _ Formula1: = Replace(Range("B" & i), "@", ",") End With Range("B" & i) = Split(num, ",")(0) Next i '////////// Range("D3") = Round(Timer - start, 2) & " 秒" End Sub : デフォルトの名無しさん [sage] 2018/01/30(火) 07:48:44.61:gBU+LQhN いちいちセルからデータを持ってこない 何度も同じ処理をしない '////////// area = Range("B3:B5003") For i = 3 To 5003 num = Replace(area(i - 2, 1) , "@", ",") With Range("B" & i).Validation .Delete .Add Type: = xlValidateList, _ Formula1: = num End With area(i - 2, 1) = Split(num, ",")(0) Next i Range("B3:B5003") = area '////////// : デフォルトの名無しさん [sage] 2018/01/30(火) 08:10:08.93:R3oCXQqF どうでもいいけど、セルのインデックスを文字列で指定するのは明らかにスマートじゃない気がする 確かcellsの方が多少速度早いんじゃなかったか : デフォルトの名無しさん [sage] 2018/01/30(火) 08:27:38.31:aDcByURH B列固定でとりあえず動作すりゃいいってのならどっちでもいいんじゃない。 将来的に変更可能性あるなら別だけど : デフォルトの名無しさん [sage] 2018/01/30(火) 12:45:58.02:vLC2w8Bp ま、好き好きなんだけどね 自分がこのプログラム引き継いだら書き直すなって思う : デフォルトの名無しさん [sage] 2018/01/30(火) 14:45:24.44:kllVg4gx 修正しました、ありがとうございます 質問2の複数回実行した時にかかる時間が増えていくのは何故でしょうか? : デフォルトの名無しさん [sage] 2018/01/30(火) 15:19:01.11:5GO1HuBo 実行毎にどんどん加算されていくんなら、なんかキャッシュしたまま離してないんじゃないの。 マクロの終わりにEndステートメント使ってみて改善するかどうかだね。 : デフォルトの名無しさん [sage] 2018/01/30(火) 16:11:27.88:kllVg4gx 最後を Range("D3") = Round(Timer - start, 2) & " 秒" End '←追加 End Sub にしたら加算されなくなりました 新規の列だとならなかったので作成したドロップダウンリストの何かが残ってるのかなと思ってたのですがEndは今回初めて知りました みなさんありがとうございました : デフォルトの名無しさん [sage] 2018/01/30(火) 16:16:06.37:kllVg4gx すみません、こっちでした Cells(4, 4) = Round(Timer - start, 2) & " 秒" End End Sub : デフォルトの名無しさん [sage] 2018/01/30(火) 17:49:35.13:2erBHUms たぶん変数をモジュールレベルで宣言してるからじゃないのこれ プロシージャ内に宣言して不都合なことある? : デフォルトの名無しさん [sage] 2018/01/31(水) 01:14:12.85:3K34O5TZ AやBなら列番号のでもイイかと思うけど 列が多くて256列目にとかなってくると セルよりrangeで文字の方が追っかけ易いよ : デフォルトの名無しさん [] 2018/01/31(水) 01:42:08.16 なるほど、マクロの最後にはおまじないとしてEndを書いといたほうがいいのか : デフォルトの名無しさん [sage] 2018/01/31(水) 07:52:17.18:1/FNqCDn それだな。 プロシージャ内ならENDは要らないと思う。 END使うのは個人的にスマートじゃなくて嫌。止むを得ず止めたい処理にだけ使うけど。 : デフォルトの名無しさん [sage] 2018/01/31(水) 07:55:30.29:1/FNqCDn 訂正、スマートってよりは場当たり的って感じで嫌 : デフォルトの名無しさん [sage] 2018/01/31(水) 08:12:45.84:bjoCXrds 普通にコーディングしてたらそんな必要はない : デフォルトの名無しさん [sage] 2018/01/31(水) 08:20:37.67:bjoCXrds 列をループさせないかつ列名がついてないような表なら無しではないかもしれないね 列名ついてるならEnumなりユーザー定義型なりで名前つけてやるべきだろうと思うが 引数に文字列の結合式を書くことが個人的にはすごく気持ち悪いけどまあそれは人それぞれかもしれないね : デフォルトの名無しさん [sage] 2018/01/31(水) 08:23:10.53:1/FNqCDn あとモジュールレベルの変数名はiとか他でも使うような名前にしない方がいいぞ。 他で使っちゃってたりして予期せぬエラーの原因になる。 : デフォルトの名無しさん [] 2018/01/31(水) 10:32:40.89:y6ZUdqMb ここで質問するか微妙ですが質問します。 エクセル起動すると 1004エラーmacrooptionsのエラーが出ます スタートメニューのすべてのプログラムからエクセルを起動しても同様のエラーがでます オフィスを再インストールしても同様エラーが出るのですが解決策ないでしょうか? : デフォルトの名無しさん [sage] 2018/01/31(水) 11:59:35.68:sVXcwb3a 他のバージョンのOffice製品が混在していないか インストールされたプログラムで「修復」を試みたか MSの fix it も試してみるべき : デフォルトの名無しさん [sage] 2018/01/31(水) 12:12:55.39:QBWxlyAw さらに言えば、モジュール変数はm,グローバル変数はgを先頭に付けたほうが保守しやすい(俺は) : デフォルトの名無しさん [sage] 2018/01/31(水) 12:38:18.79:/yXosPjR え・・・ グローバル変数使ってるの? : デフォルトの名無しさん [sage] 2018/01/31(水) 13:51:36.51:NL/gtaqq モジュール変数なら許せてグローバル変数が許せない、ということではないよな? : デフォルトの名無しさん [sage] 2018/01/31(水) 14:08:57.02:4YhVePXS スコープが広がるごとに許容範囲は狭まるだろ クラス使うならモジュールレベルの変数は普通に使うつーか、使わんと大したもん作れない : デフォルトの名無しさん [sage] 2018/01/31(水) 15:23:18.93:1/FNqCDn 自分は他のソフトを制御するのにVBA使ってるけど、モジュールレベル変数やグローバル変数を使うとインスタンスが残って不具合出ることが多かったから使わないようにしてる。 解放させる手もあるけど、タイミングに気を使うし記述も面倒。そしてなにより不具合発生原因の特定がスコープが広すぎるときつい。 だったらプロシージャ内で終わるの前提で設計する方が楽という結論になった。 あと、公式でプロシージャレベル変数が保持されることに期待するマクロは推奨しないみたいなコメントなかったっけ。 : デフォルトの名無しさん [sage] 2018/01/31(水) 17:43:55.07:QBWxlyAw そうそう。 フォームもクラスも使ったプログラミングを始めるとグローバル変数を使わざる負えない場合がある。 下手にENDを使われると同時に開いてるアドインが使い物にならない可能性があるので注意したほうが良いかも : デフォルトの名無しさん [sage] 2018/01/31(水) 17:55:21.63:4YhVePXS クラスにろフォームにしろそのモジュール内で完結させるのは前提だけどね 標準モジュールでもモジュールレベル変数が有効なことがないこともないがね 完全にパブリックなグローバル変数は可能な限り使わないのが基本だろう : デフォルトの名無しさん [sage] 2018/01/31(水) 19:46:12.53:/yXosPjR 今までグローバル変数を使わなければ ならなかった局面に当たったことがない どんな時に使わなければならなくなる? いや、いつも外部とのやり取りは パブリックなメソッドやプロパティで やってるんだけど : デフォルトの名無しさん [sage] 2018/01/31(水) 19:50:56.33:wkRhZUuX ID変わったけど55です。それについては異論はないかな。 ただのように勘違いする人が出てきそうなので、ENDを使わないのも基本だとして根拠を上げてみた。 例えばアドインでは常駐フォームとかWithEventsでイベントをフックするためのクラスを制御するのにグローバル変数を使わないといけない。 しかもENDを使った瞬間に開いてるフォーム全部消えるんだよね。 せめて同一プロジェクトのみのメモリ解放だと良いんだがExcel VBA全体のメモリが開放されてしまう。 ENDはおまじないはおまじないでも、バルスだと思って使って欲しい。 : デフォルトの名無しさん [] 2018/01/31(水) 20:27:34.36 Endを使われても問題が生じない堅牢なアドインの作り方としては、設定値はレジストリに保持しておいてグローバル変数はあくまでキャッシュとして使うのがいいのかな? (グローバル変数を使う前に必ず存在チェックして、NothingやEmptyなら都度レジストリから値を読み出してインスタンス再生成) : デフォルトの名無しさん [] 2018/01/31(水) 20:31:58.29 ちなみにグローバル変数と書いたけど、Endでモジュールレベルの変数もクリアされるという理解 : デフォルトの名無しさん [] 2018/01/31(水) 20:42:31.70:8SvFgWa2 可愛い質問やなグローバル変数もプロパティも同じ事やで お前はまずグローバル変数使わなきゃいいってもんやないて事を覚えた方がええな : デフォルトの名無しさん [sage] 2018/01/31(水) 20:43:12.79:wkRhZUuX 確かにモジュール変数にパブリックメソッドを経由してアクセスするようにすればグローバル変数は必要ないかな。 「使わざるを得ない」という表現は撤回するよ。 アドイン開発ではそれが基本かな。 ENDに相当する「停止」ボタンをデバッグ中に頻繁に押すから事前とそういう作り方になると思う。 あとレジストリも良いけど俺はXML派かな。 理由はPC間の移行がユーザーレベルでも出来るからだけど、今にして思えばインポートはダブルクリックで出来るレジストリのほうが簡単だな。エクスポートはちょっと厄介だけど。 : デフォルトの名無しさん [sage] 2018/01/31(水) 20:43:32.54:QI8wXuam そんなことしなくても ちゃんとスコープ毎に解放する作りにしとけば いいんじゃない? 処理が走り終わったときはこれこれ、 ブックが閉じるときはこれこれ、 といった感じで : デフォルトの名無しさん [sage] 2018/01/31(水) 20:47:16.36:QI8wXuam あー・・・ 同じと思ってるんだね : デフォルトの名無しさん [sage] 2018/01/31(水) 21:19:51.64:pJssMamu プリミティブな値を保持するコンテナが欲しいとき、ほとんどの場合はグローバル変数やモジュールレベル変数を使うまでもなくセルなどに書き込むだけで事足りる セルへのアクセス時には組み込みのイベントがいくつも走るのでそこは要注意だし、巨大な動的配列を使用する場合は処理速度の問題が出てくるけど : デフォルトの名無しさん [sage] 2018/01/31(水) 21:22:46.33:aBe463em サーバーの監視業務からいきなりVBAでデータ抽出したりする部署に飛ばされたんだけど、なんかいい勉強方法あります? SQLサーバから引っ張ったりしてます。 : デフォルトの名無しさん [sage] 2018/01/31(水) 21:32:20.06:4YhVePXS endはホントに終わらせたいときにしかつかっちゃダメだろう PCで言えば強制終了と同じようなもんだ 仕方なしに使うもんで、グローバル変数と同じように出来るだけ使わないようにするもの 少なくともおまじない感覚はダメだな : デフォルトの名無しさん [sage] 2018/01/31(水) 21:39:56.78:JpECFIQ2 エクセルはメモリを適切に解放しない事が多々あるので、Endが有効な場面もそれだけ増えるというのが困りもの : デフォルトの名無しさん [] 2018/01/31(水) 21:56:08.56:niw7tDFN すみません質問です。初心者です 曜日を順番に表示したいのですが、出てくる曜日がデタラメなのです。 どこか悪いんでしょうが、さっぱりわかりません。 ベテラン様、教えてくだされ。 Dim 年 As Integer, 月 As Byte, 日 As Byte 年=2018 月=1 i = 1 For 日 = 1 To 31 Cells(i + 3, 3).Value = Format(年 / 月 / 日, "aaa") i = i + 1 Next : デフォルトの名無しさん [sage] 2018/01/31(水) 22:02:51.06:QI8wXuam 適当だけどセルに設定されてる値が 日付型になってないことない? : デフォルトの名無しさん [] 2018/01/31(水) 22:13:47.19:niw7tDFN 日付型にしてみたけど、やはりダメみたいです。 : デフォルトの名無しさん [] 2018/01/31(水) 22:14:33.51 > Format(年 / 月 / 日, "aaa") なんで割り算してるの? : デフォルトの名無しさん [] 2018/01/31(水) 23:18:11.45:q0yM2zae Cells(i + 3, 3).Value = Format(DateValue(年 & "/" & 月 & "/" & 日), "aaa") : デフォルトの名無しさん [sage] 2018/02/01(木) 00:24:06.09:vMTE7P+w クラスモジュールのやつはインスタンスごとに別の実体だからモジュール変数じゃない。 : デフォルトの名無しさん [] 2018/02/01(木) 06:16:45.45:6FACDdoC うまくいきました。 助かりました、ありがとうございました。 : デフォルトの名無しさん [sage] 2018/02/01(木) 08:11:40.86:qON5QokW 急いでるとよく間違えるよな。しかも思い込みでミス発見に時間かかかるかる : デフォルトの名無しさん [sage] 2018/02/01(木) 19:37:02.10:cx2O6kE2 わざわざ日付を文字列にしなくてもいいよ Cells(i + 3, 3).Value = Format(DateSerial(年, 月, 日), "aaa") 禿げ同 しょうがないので > Cells(i + 3, 3).Value = Format(年 / 月 / 日, "aaa") の行にブレーク掛けて止まったらイミディエートウィンドで Debug.Print Format(年 / 月 / 日, "aaa") Debug.Print 年 / 月 / 日 Debug.Print 年 ... ってやってる : デフォルトの名無しさん [] 2018/02/01(木) 19:45:37.17:mRcX8hpa 禿乙 : デフォルトの名無しさん [] 2018/02/02(金) 10:09:17.92:VDaFhWcz ttp://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/bingo_game.html すみません このページでダブルビンゴの判定を追加しようと思うのですがうまくいきません。。。 : デフォルトの名無しさん [sage] 2018/02/02(金) 10:42:11.74:+j1MBhFC ワシはティンコを2本もっている 2本目はとっておきだ(´・ω・`)b : デフォルトの名無しさん [sage] 2018/02/02(金) 18:16:54.37:ZpXsrnJV バケモノじゃねーか : デフォルトの名無しさん [] 2018/02/02(金) 23:02:56.20 試してないけどこんな感じかね ・関数の先頭に「Dim cn5 As Integer」を追加 ・「cn1 = 0: cn2 = 0」の直前行に「cn5 = (cn1 ¥ 5) + (cn2 ¥ 5)」を追加 (「/」ではなく「¥」) ・「cn3 = 0: cn4 = 0」の直前行に「cn5 = (cn3 ¥ 5) + (cn4 ¥ 5)」を追加 ・「End With」の直前行に以下を追加 If cn5 = 5 Then .Range(cf(k)).Value = "BINGO!!" Beep End If : デフォルトの名無しさん [] 2018/02/02(金) 23:03:49.77 間違えた × If cn5 = 5 Then ○ If cn5 >= 2 Then : デフォルトの名無しさん [] 2018/02/08(木) 00:16:22.23:MSYeXSpW クロスワードパズル、迷路探索アルゴリズムをExcelVBAで作ることができたので、 今度はテトリス作ってみようと思う。 が、飛躍しすぎ? キー操作で回転させるとか、→押下で横に移動しつつ落下するとかは、難しそうだな。 タイマとかも張らないといけない? : デフォルトの名無しさん [sage] 2018/02/08(木) 07:26:16.72:XpMtH+Ey 5年くらい前に作った。 余裕とは言わないけどぷよぷよ作るよりは楽。 タイマーはAPIで見てる。 ブロックはセルに数字を入れて 条件付き書式で着色した。 今作ればクラスの理解があの頃とは全然違うので 多分また違う作りになると思う。 : デフォルトの名無しさん [sage] 2018/02/08(木) 13:17:56.16:qQDxntOi テトリスってWinAPIに慣れるために最初に作るようなヤツだから構造的にはそこまで難しくないだろうな でもエクセルだと描画速度の問題があるから・・・ : デフォルトの名無しさん [sage] 2018/02/08(木) 13:25:02.66:f2SIrsod 大丈夫。EXCELとは言えそこまで遅くはないよ。 むしろ遅くなったら作りに問題があると考えていいと思う。 : デフォルトの名無しさん [sage] 2018/02/08(木) 19:21:45.57:aY4A4Yk1 宣言済みの変数を全て初期化するにはどうしたらいいですか? : デフォルトの名無しさん [sage] 2018/02/08(木) 19:31:17.27:8qhKGghx 律儀に全部の変数になにかを代入すりゃいいだけだろ : デフォルトの名無しさん [sage] 2018/02/08(木) 19:48:57.07:aY4A4Yk1 それはそうなんですが変数を追加とかしたときに初期化漏れが出そうで・・・ その方法しかないんですかね? : デフォルトの名無しさん [sage] 2018/02/08(木) 19:51:00.94:fuTq97cg 宣言した直後は初期化されてる マクロの動作がすべて終了したら自動的に初期化される マクロの動作の途中ですべての変数を初期化したいなら、初期化するプログラムをいちいち書くしかないけど、 それはもともとの設計が悪い、方針がおかしい : デフォルトの名無しさん [] 2018/02/08(木) 19:52:33.01:x393c3Y0 構造体の初期値とかな : デフォルトの名無しさん [sage] 2018/02/08(木) 19:53:04.95:fuTq97cg そもそも初期化漏れってなんだ?たとえば Dim AAA As Integer みたいに書いてあると、マクロが実行開始された時点ではAAAは必ず0になってるんだけど ほかの言語と勘違いしてないか : デフォルトの名無しさん [] 2018/02/08(木) 20:07:30.59:nI+/jCYy Integerとか使うなよw : デフォルトの名無しさん [sage] 2018/02/08(木) 20:12:43.47:aY4A4Yk1 設計が悪いのは確かです。私がVBAド初心者の頃から改良・機能追加を繰り返したコードでぐちゃぐちゃしてます。Public変数だらけなんです。 まとめて初期化する方法はなさそうですね、残念ですがレスありがとうございました。 : デフォルトの名無しさん [sage] 2018/02/08(木) 20:55:54.86:XpMtH+Ey 欲しい初期値がデフォルト値とは限らない : デフォルトの名無しさん [sage] 2018/02/08(木) 21:31:08.51:YcyG5pes リセットするプログラム組んでおいて呼び出すとか : デフォルトの名無しさん [sage] 2018/02/08(木) 21:43:42.80:wjl/A/KY 変数のスコープは短い方がメンテナンス性がいいと思います : デフォルトの名無しさん [sage] 2018/02/08(木) 21:48:43.16:Cj1tzdzh 変数の値なんて必要に応じてセットするもんだろ なんだよ「全変数初期化」って プログラミングの基礎からやりなおした方がいい : デフォルトの名無しさん [sage] 2018/02/08(木) 21:50:33.84:fuTq97cg 初期化するサブルーチンを作れ : デフォルトの名無しさん [] 2018/02/08(木) 21:52:16.55:nI+/jCYy が必要だと思ったから聞いてんだろw 何を訳のわからん事言ってんだコイツはw : デフォルトの名無しさん [sage] 2018/02/08(木) 22:08:53.43:aY4A4Yk1 後からPublic変数を追加した場合、その"リセットするプログラム"も変更の必要ありますよね? Public変数を一括で初期化できるならいいんですが そうですよね。今更ですが実感しています。 そうです。変数の値を必要に応じてセットしたいんです。 必要な状態とは、変数宣言直後の値なんです。 できませんかね? 一括で初期化するサブルーチンってできますか? : デフォルトの名無しさん [sage] 2018/02/08(木) 22:30:18.23:gEZZVs8q それを検討する間にソースを書き換えた方が早そう。 それもできない程、巨大なモノならVBAの範疇を超えてると思う。 : デフォルトの名無しさん [sage] 2018/02/08(木) 22:47:07.92:XpMtH+Ey ひとこと言わせてもらうと そもそも「一括で全ての変数を初期化する」と言う 機能が必要になっている時点で多分構成的に 破綻していると思う。 変数を設定する前にどんなプログラムをどんな構成で組むのか、 そのためにはどんなライフサイクルの変数が必要で スコープはどうするのか 次回から考えて作るようにした方がいい。 もっとも、今そんなことを言っても 多分取り返しのつかないようなコードになっているだろうから とりあえず一つクラスを作っておいて 今パブリック変数として使っている変数を そのクラスのプロパティとして移してやって、 生成する際にコンストラクタで初期化してやったら どうだろうか。 条件によって初期値が変わるのならそのクラス内に そのためのメソッドを作ってもいいと思う。 あまりいい作りとは言えないけど そのクラスのインスタンスを モジュール変数にセットしておいて 初期化したいときは新たに生成したものを その変数に入れてやればとりあえずは 現状よりはもう少し手が入れやすくなると思う。 : デフォルトの名無しさん [] 2018/02/08(木) 22:48:28.42 setvar, letvar, getvar, setarray, letarray, getarray みたいな共通関数を作りましょう。 型ごとに letstrvar, getintvar みたいなのも作っといたほうが便利かな。 まあ大きな関数5〜6個と小さな関数30個くらい実装すれば事足りるでしょう。 既存の g_FooBar, g_Baz みたいなPublic変数へのアクセスを全部 letstrvar("g_FooBar", local_str), local_int = getintvar("g_Baz") のような形式に書き換えましょう。 共通関数の中では、実際の値は巨大な配列に保持して、名前とインデックスを紐付けて管理しましょう。 こうすればグローバル変数の置換は機械的にできるし、変数の初期化も一発です。 健闘を祈ります。 : デフォルトの名無しさん [sage] 2018/02/08(木) 23:00:19.46:aY4A4Yk1 レスありがとうございます。 このVBAコードは自分しか使わないし、自分以外がメンテすることはありえないので、 ろくにプログラミングの基本マナーなんてものを勉強しないまま、コード追加追加でわけわからなくなってしまったものです。 自分の書き込みから短時間で、お前のコードの設計が悪いんだとのレスを多く頂いて正直落ち込んでおります・・・ 薄々気付いてはいましたが、他の方から指摘されると流石にこたえました。 少しずつ改善していこうと思います。 その上で、をやっていこうと思います。 現時点での内容は理解できていませんが、なんかすごい貴重なアドバイスなような気がします。参考にさせていただきます。ありがとうございました。 : デフォルトの名無しさん [sage] 2018/02/08(木) 23:48:09.40:XpMtH+Ey 構成に関しては単一責任原則に沿って作れば 上達が早くなると思うので もし知らなければググってみた方がいいかも。 初期化というのは実はそこそこ奥の深い話で ファクトリーパターンやファクトリーメソッドとか ググると色々出てくるのだけれど かなりObject指向寄りの話になってしまうので ここではまぁ興味があればということで。 頑張ってくださいね。 : デフォルトの名無しさん [sage] 2018/02/09(金) 06:47:45.10:Oqb9O2xf > 後からPublic変数を追加した場合、その"リセットするプログラム"も変更の必要ありますよね? 変更すればいいじゃない そもそも今あるPublic変数はともかく今後もPublic変数バンバン増やしちゃるって思ってるの? : デフォルトの名無しさん [sage] 2018/02/09(金) 08:10:43.77:pONSvQ5P j自分しか使わないってんなら現状使っているのはそのまま置いといて、いい機会だと 思って新たに作るぐらいの気持ちで、「少しずつ改善」なんて小手先のことやらずに1度徹底的 に作り直したほうが良い。 : デフォルトの名無しさん [sage] 2018/02/09(金) 12:00:04.92:liPrOEdm グローバル変数、「さっき設定した値を後でまた参照する」的な意味でどうしても必要になることは理解できるけど、 あったとして一つか二つがいいところ。 データセット的なものを配列使わず保持するならたくさん必要になるけど、さすがにそれは配列かコレクション使え。 : デフォルトの名無しさん [sage] 2018/02/09(金) 19:07:16.76:pFe+ikyv 毎回初期化が必要なグローバル変数があるならいっそ値をワークシートに保存して管理した方が安全だよな : デフォルトの名無しさん [] 2018/02/09(金) 19:29:49.16 誰かを巨大配列じゃなくてワークシートに記録するやり方で実装してください。 : デフォルトの名無しさん [] 2018/02/09(金) 19:45:27.04:mfiNCmZ5 さん渾身のネタ、スベる : デフォルトの名無しさん [sage] 2018/02/10(土) 01:27:55.34:UqvxHzys Worksheet_Calculateが頻繁に呼び出され、これが主な処理であるとき Public変数だらけになったことはある 初心者だから他にもっといい方法があったのかもしれんが : デフォルトの名無しさん [sage] 2018/02/10(土) 04:42:12.40:sZXQwMqu でもみんなPublicな変数使ってて怖くない? 標準、あるいはクラスモジュール単位で 作られたメンバ変数が勝手に外部から 書き換えられちゃうんだよ? しかもブレークポイントにもかからないから いろんなところから頻繁に書き換えられたら 変な値が入っても犯人探しが大変だし。 前にも書いたけどプロパティにしたり 関数にしたりしてアクセサつけといた方がいいと思うよ。 読み取り専用にも出来るしね。 : デフォルトの名無しさん [sage] 2018/02/10(土) 05:43:42.77:FhCw4HrB マクロの設計にもよるだろうけどグローバル変数使わずに大がかりなマクロ作ったことあるから、 絶対に避けられないというのは疑問だな。 だいたい初期化が必要な時点でグローバル変数にするのは不適当だし。 : デフォルトの名無しさん [sage] 2018/02/10(土) 07:57:32.74:vxg4RvSK 初心者あるあるだな 修正や追加を繰り返すうちにコードがスパゲッティになって、変数がどこで書き換えられたか追跡できなくなったもんだから特定のタイミングで一気に初期化したい すごい手間がかかってるから全面的な書き直しもやりたくない 保守性やモジュール化などの概念がわかってきたところで覚悟を決めて、設計からやり直した方が幸せになれるパターン : デフォルトの名無しさん [] 2018/02/10(土) 07:57:57.08:4c5k2dma おまえらにはグローバル変数は決して悪いものではないという事を知って欲しい : デフォルトの名無しさん [] 2018/02/10(土) 12:25:34.71:silh4Kun コントロールのイベントプロシージャはプライベートっていう制約があるから シートと、ユーザーフォーム間のActiveXコントロールで変数の受け渡しをする場合は、パブリック変数を使用するしかいい方法がないと思う : デフォルトの名無しさん [sage] 2018/02/10(土) 12:29:55.88:XBpzoSQ/ ワークシートはグローバル変数みたいなもん 印刷さえしなければたいがい便利に使える : デフォルトの名無しさん [sage] 2018/02/10(土) 14:00:23.82:7mQmOVGk シートから直接取ればいいのでは?? 使い回すにしてもプライベート変数で事足りると思うけど。 パブリックにして読み書き自由にする必要はないんじゃないか? : デフォルトの名無しさん [sage] 2018/02/10(土) 17:52:03.19:pkIiHatw rangeオブジェクトを分割して2つのrangeオブジェクトにしたいのですがこれだと値がおかしいので解決方法教えてください Set obj = Range("a1:b100") set obj1 = obj.range(obj.cells(1,1),obj.cells(100,1)) set obj2 = obj.range(obj.cells(1,2),obj.cells(100,2)) : デフォルトの名無しさん [sage] 2018/02/10(土) 18:04:50.18:o71hUKxM 範囲をセットしてるだけで 値をセットしているわけではない : デフォルトの名無しさん [sage] 2018/02/10(土) 19:22:41.50:+Zdspcyw objに設定してるセルが存在するシートの参照式が省略されてるけど、シートはActiveSheetでいいの? あと、obj1とobj2には値を設定してるわけじゃないんだが、値がおかしいってどういうこと? : デフォルトの名無しさん [] 2018/02/10(土) 21:53:50.67:9qCKy78B vbaに関する質問か分からないけど、 他者が作成したexcel vbaマクロの中身をのぞこうとしたら、パスワードがかかって開けなかった。 どうやったらパスワードを特定できる? : デフォルトの名無しさん [sage] 2018/02/10(土) 21:55:42.82:Ohg/Tsol そんなもの他者が特定出来たらパスワードの意味がないだろう : デフォルトの名無しさん [sage] 2018/02/10(土) 21:55:42.88:yN3uaIXc パスかけたやつに聞く : デフォルトの名無しさん [] 2018/02/10(土) 22:02:18.01 VBAのパスワード保護なんてあってないようなものだからすぐ解除できる ttp://neos21.hatenablog.com/entry/2016/09/30/081709 : デフォルトの名無しさん [sage] 2018/02/10(土) 22:16:02.76:5tf0t1pe Set obj = Application.InputBox("2列選択", Type:=8) Set obj1 = obj.Range(obj.Cells(1, 1), obj.Cells(obj.Count / 2, 1)) Set obj2 = obj.Range(obj.Cells(1, 2), obj.Cells(obj.Count / 2, 2)) こんな風にした2列選択した後に1列毎のrangeオブジェクトに割り当てようとしています 試しにobj1.Selectとやって範囲を確認してみると関係のないセルが選択されてしまいました : デフォルトの名無しさん [] 2018/02/10(土) 23:02:35.50 Set obj = Application.InputBox("2列選択", Type:=8) Set obj1 = obj.Worksheet.Range(obj.Cells(1, 1), obj.Cells(obj.Count / 2, 1)) Set obj2 = obj.Worksheet.Range(obj.Cells(1, 2), obj.Cells(obj.Count / 2, 2)) : デフォルトの名無しさん [] 2018/02/10(土) 23:24:31.56 このほうが汎用的なのかな Set obj = Application.InputBox("2列選択", Type:=8) Set obj1 = Application.Range(obj.Cells(1, 1), obj.Cells(obj.Count / 2, 1)) Set obj2 = Application.Range(obj.Cells(1, 2), obj.Cells(obj.Count / 2, 2)) : デフォルトの名無しさん [] 2018/02/10(土) 23:27:24.03 はだめか Application.Range プロパティ (Excel) >オブジェクト修飾子を指定せずにこのプロパティを使用すると、 ActiveSheet.Range のショートカットとなります。 でいいと思うけど、Range, Cellsの仕様がいまいち分からなかったから理論的になぜかは説明できない : デフォルトの名無しさん [sage] 2018/02/10(土) 23:39:33.30:o71hUKxM set obj = nothing は最後に入れるべきか、 ほったらかしでも問題無いのか どうなんだろう? : デフォルトの名無しさん [] 2018/02/11(日) 00:18:26.88:q9UPBdZm おまえらには必要 : デフォルトの名無しさん [sage] 2018/02/11(日) 04:53:44.34:LDeaRbgm 同じADOでもデルファイのクローズはナッシングだけど、VB系の場合はクローズだよねだいたい たしかクローズせずにナッシングするとクローズできなくなる : デフォルトの名無しさん [sage] 2018/02/11(日) 08:29:24.42:AIGXauyP 例えばC1:D:4を選択した場合 1.obj.Rangeの中で更にobj.Cellsを指定するということは、C列目を基準にC列目を指定をしていることになる。 だからRangeの中にCellsを書く時はobj.Cellsではなく、obj.Worksheet.Cellsが良い。 2.obj1がC1:C4、obj2にD1:D4をセットしたいってことだよな? obj.Cells(obj.Count / 2, 1) この書き方だと行数を半分にしているのだがこれは一体・・・ もしC1:F10を指定した場合にC1:D10、E1:F10に分けたいわけじゃないの? 3.可読性が死ぬからRange使うのをやめよう。 範囲指定をする時はResize、Offsetを使ったほうが直感的です。 当初の質問を参考に2の通りだと仮定して Set obj1 = obj.Resize(, obj.Column / 2) Set obj2 = obj.Resize(, obj.Column / 2).Offset(,obj.Column / 2) Objには2列しか選択されない事が確定しているなら Set obj1 = obj.Resize(, 1) Set obj2 = obj.Resize(, 1).Offset(,1) : デフォルトの名無しさん [] 2018/02/11(日) 10:16:47.04 1についての文献あれば教えて 2に関しては、2列選択中だから総セル数を2で割れば行数が算出できるってことやろ obj.Rows.Countのほうがいいとは思うけど : デフォルトの名無しさん [] 2018/02/11(日) 10:18:33.85 >1についての文献 あ、想像で書いてるどっかのブログとかじゃなくて ちゃんとしたMicrosoftの公式文献ね : デフォルトの名無しさん [] 2018/02/11(日) 10:29:03.91:q9UPBdZm 文献()読んでもわからんからこんな掃き溜めで質問しとんのやろw ややこしい奴やなあw : デフォルトの名無しさん [] 2018/02/11(日) 10:34:27.69 俺は回答者側や : デフォルトの名無しさん [] 2018/02/11(日) 10:37:10.14:q9UPBdZm 俺は回答者側や(キリッ あのさあ〜お前羞恥心ないの?www : デフォルトの名無しさん [sage] 2018/02/11(日) 10:38:14.38:YMxCZLKM ほったらかしで問題ない場合と そうでない場合があるので よくわからなければ明示的に Nothing入れといた方がいい : デフォルトの名無しさん [sage] 2018/02/11(日) 10:54:41.06:A61Ds/EI > あ、想像で書いてるどっかのブログとかじゃなくて > ちゃんとしたMicrosoftの公式文献ね 偉そうにほざく前にMSDNぐらいググれ ttps://msdn.microsoft.com/ja-jp/library/cc408924.aspx : デフォルトの名無しさん [] 2018/02/11(日) 10:58:29.29 どこにobj.Rangeの引数としてobj,Cellsが指定された場合の解釈のされ方が書いてあるの? どこみてもActiveSheet.Rangeの引数として使ってる例ばっかりだし、内部的にどういう形式に変換されてるのか全然読み取れないんだわ : デフォルトの名無しさん [sage] 2018/02/11(日) 11:40:12.40:A61Ds/EI > 偉そうにほざく前にMSDNぐらいググれ って書いてあるのにバカすぎる URLは単なるヒントな まあ普通の理解力あればあれで充分だと思うが w : デフォルトの名無しさん [] 2018/02/11(日) 11:49:28.10 煽りはいいから笑 結局探したけど見つけられなかったんだろ? 気持ちは分かるわ : デフォルトの名無しさん [sage] 2018/02/11(日) 12:24:58.11:A61Ds/EI そう思いたいならそれでいいんじゃね w : デフォルトの名無しさん [sage] 2018/02/11(日) 12:56:24.79:AIGXauyP 公式文献は知らないがそういうもんだと納得している。 想像()とか、こんなくらい知ってるわヴォケとか言われそうだが set ws = Worksheets(1)があると仮定して。 これはどれもRange("B2")への参照を示すわけだが ws.Cells(2,2) ws.Cells(2,2).Cells(1,1) ws.Cells(2,2).Range("A1") CellsとかRangeは同一ワークシート内であれば、いくらでも参照先を変更できる。 例えばこれはどれもRange("C3")への参照。 B2を基準(1,1)として(2,2)を見ていることになるからだ。 ws.Cells(2,2).Cells(2,2) ws.Cells(2,2).Range("B2") ws.Range(ws.Cells(2,2).Range("B2")) 問題の件はobjに既にRangeが格納されているからわかりづらいが Set obj = ws.Range("B2") の場合に obj.Range(ws.Cells(2,2)) というのは ws.Range("B2").Range(ws.Cells(2,2)) ってことだよね 単一セルの場合はws.Range("B2").Cells(2,2)と同一の結果になる。 範囲の場合も考え方は同じだがRange(a,b)でaとbに範囲を渡した場合 aとbを合わせた領域の最端の範囲を示すのは言わずもがな。 結局のところ何も難しい話ではなくて、Offsetの相対指定とResizeの範囲指定を同時にできるのがRangeだっていう話に戻る。 普段ws.Range("A1")と書いているものは、実はws.cells(1,1).Range("A1")の省略形だって考えて俺は納得した。 : デフォルトの名無しさん [sage] 2018/02/11(日) 13:17:28.48:A61Ds/EI 素直な君には正解を教えてあげる w For example, if the selection is cell C3, Selection.Cells(2, 2) returns cell D4 ttps://msdn.microsoft.com/en-us/vba/excel-vba/articles/range-item-property-excel : デフォルトの名無しさん [] 2018/02/11(日) 16:48:17.26 ありがとう。 結局、想像でしかないけど、 obj.Range(obj.Cells(x, x), obj.Cells(x, x)) を独自関数 SelectionRangeCells(obj, obj.Cells(x, x), obj.Cells(x, x)) に置き換えると、こんな感じのことをしているのかね。 Function SelectionRangeCells(ByRef rng As Range, ByRef cell1 As Range, ByRef cell2 As Range) As Range Dim startRow As Long Dim endRow As Long Dim startColumn As Long Dim endColumn As Long startRow = WorksheetFunction.Min(cell1.Row, cell2.Row) endRow = WorksheetFunction.Max(cell1.Row, cell2.Row) startColumn = WorksheetFunction.Min(cell1.Column, cell2.Column) endColumn = WorksheetFunction.Max(cell1.Column, cell2.Column) Set SelectionRangeCells = rng.Resize(endRow - startRow + 1, endColumn - startColumn + 1).Offset(startRow - 1, startColumn - 1) End Function obj.Range("A1")という形式の場合は公式ドキュメントに明確に書かれてるね。 ttp://https://msdn.microsoft.com/ja-jp/vba/excel-vba/articles/range-range-property-excel "> ttps://msdn.microsoft.com/ja-jp/vba/excel-vba/articles/range-range-property-excel obj.Range(obj.Cells(x, x), obj.Cells(x, x)) の場合はobj.Cells(x, x)が実体セルを指していてobjとの相対位置も分かってるわけだから Rangeプロパティ内で相対参照を算出する実装方法も考えられるしそのほうが使う側は分かりやすいはずだけど そう実装していないという明確な記述がどこにもなかったから実際に動かしてみての想像しかできなかった。 (ちなみに : デフォルトの名無しさん [sage] 2018/02/11(日) 17:24:07.93:A61Ds/EI > (ちなみにがなにやら勘違いしているようだがCells(x, x)【Cells._Default(x, x)】が何を返すかを知りたかったわけではない) その理解力で人を勘違い呼ばわりとか w : デフォルトの名無しさん [] 2018/02/11(日) 17:54:51.66:q9UPBdZm 俺からしたらおまえもと似たりよったりだからw まあ今回の件は僅差でお前の勝ちだけどw : デフォルトの名無しさん [sage] 2018/02/11(日) 18:02:54.57:zWT4td5V メゾット君も負けを認められるほど成長したかと感心したもののレス見ると何で勝利宣言してんのか分からなかった : デフォルトの名無しさん [sage] 2018/02/11(日) 21:45:11.45:jnjDiTfu 今回の使い方は良いのか悪いのか ちょっと判断つきかねるなぁ 可読性がちょっとね 扱い方そのものは悪いとは思わない 書いてる人も気付いているか分からないけど やってることはデコレータパターンの それにかなり近いんだよね 洗練されればそれなりに便利かも知れないね : デフォルトの名無しさん [sage] 2018/02/11(日) 22:48:44.70:49jQhb5f タスクスケジューラで、Private Sub Workbook_Open()、の記述のあるブックを開くと、 Private Sub Workbook_Open()が実行されるときもあれば、実行されないときもある。 なんでなんだろ? その違いが今のところ掴めないでいるんですが、どなたか何か情報をお持ちではないですか? : デフォルトの名無しさん [sage] 2018/02/11(日) 23:09:13.81:S5L6PYJ0 ログオフしてるときに動かしたいなら事前にちょっと設定が必要だけどそこら辺は大丈夫? ttp://gagaj.hateblo.jp/entry/2015/03/21/162218 : デフォルトの名無しさん [sage] 2018/02/11(日) 23:28:58.59:49jQhb5f ユーザーがログオンしているときのみ実行する、にチェックが入っていますので違うと思います。 念のため、紹介してもらったサイトに従いフォルダを作成しましたがそれでも変わらずです。 他に情報ありましたらお知らせください。ありがとうございました。 : デフォルトの名無しさん [sage] 2018/02/12(月) 07:06:15.59:Mlpgnb6c 実行されない時があるってことは実行される時もあるの? auto_open()も試してみてよ。 微妙に挙動が異なるので動くかも。 詳しくは違いでググって下さい : デフォルトの名無しさん [] 2018/02/12(月) 08:05:14.90:xQy5Bsyb あほやなあオープンマクロが動かんのはオープンしとらんからにきまっとるんやがw : デフォルトの名無しさん [sage] 2018/02/12(月) 08:30:35.08:F3ZoN7fb > 他に情報ありましたらお知らせください。ありがとうございました。 て言うかまずお前が情報書けよ > ユーザーがログオンしているときのみ実行する、にチェックが入っていますので違うと思います。 なんて後から言われても困る : デフォルトの名無しさん [sage] 2018/02/12(月) 10:49:27.81:fd37PB9t スケジュールで走らせるのが目的なら イベントにたよらなくても VBSからVBAのプロシージャを直で指定して呼べた気がする でVBSの方をスケジューラーに登録しておく ググれば方法が見つかると思うのでお試しあれ : デフォルトの名無しさん [] 2018/02/12(月) 11:56:54.51:ovw7+iFl おまえはどんなショボいPCを使っているのか?Windows95でCPUは486DXか? : デフォルトの名無しさん [sage] 2018/02/12(月) 12:41:45.34:F3ZoN7fb COM経由で操作するなら似たようなもん : デフォルトの名無しさん [sage] 2018/02/12(月) 14:28:15.32:RHpKon14 へーsystemアカウント用のDesktopフォルダ作るのか なるほどね : デフォルトの名無しさん [sage] 2018/02/15(木) 10:49:13.30:n3ZAbmwK VBE起動したあとVBEのウィンドウを最大化するんだけど、 ブックを閉じてVBEを開くと小さいウィンドウで開くから、また最大化する・・・のが面倒なんですが、 前回終了時のウィンドウサイズを記憶させることってできます? : デフォルトの名無しさん [sage] 2018/02/15(木) 12:06:52.20:tgIxQ6Uj 標準機能では無理 【気軽に「こんなソフトありませんか?」Part.176】 ttps://egg.5ch.net/test/read.cgi/software/1511329804/ : デフォルトの名無しさん [sage] 2018/02/17(土) 18:05:06.20:XvsvycnR vbaで正規表現書いていたのですが(?:)って使えないんでしょうか? キャプチャして欲しくない部分が結果に混ざるのでできれば最初から消しておきたいんですが 結果に対して処理するしかないんですかね : デフォルトの名無しさん [sage] 2018/02/17(土) 18:26:45.53:DOQJ47ER いま手元に環境ないから試せないけどRegExp (Microsoft VBScript Regular Expressions 5.5)使ってるなら使えるはずだが... : デフォルトの名無しさん [] 2018/02/17(土) 18:39:43.21 普通にキャプチャしてSubMachesで必要な部分だけ取り出せばいい : デフォルトの名無しさん [sage] 2018/02/17(土) 20:20:00.39:XvsvycnR できました ありがとうございました : デフォルトの名無しさん [] 2018/02/18(日) 00:43:49.98:trAPtbQv 礼などいらんよ : デフォルトの名無しさん [sage] 2018/02/18(日) 09:52:01.75:VPiCj08E いいってことよ(´・ω・`)b : デフォルトの名無しさん [sage] 2018/02/20(火) 20:34:05.33:po95iPWj 派遣先の親分がVBAの動作速度の改善のためにHDDをSSDに替えよう なんて言っているけれど VBAとSSDって動作速度の面で関係ありますか? これってSATA接続のHDD上のExcelファイルを編集するのとUSBメモリ(USB2.0接続)では速度差が出ると言っているようなものだろうけれど いかんせんUSBメモリはすべて捨ててしまって検証が出来ないです… : デフォルトの名無しさん [sage] 2018/02/20(火) 20:46:01.61:D3Dd0C9m 派遣先の親分に対して何がしたくて、どういう裏付けのための「お言葉」を貰いに来たの? : デフォルトの名無しさん [sage] 2018/02/20(火) 20:51:34.56:po95iPWj SSDには拘らずPC全てを新調する流れに誘導したいです : デフォルトの名無しさん [sage] 2018/02/20(火) 20:54:53.19:egNrIJ1q ファイルを100個作って保存するとかなら効果あるかも? 誤差の範囲だと思うけど VBAの速度を上げるならCPUパワーとロジックに力をそそぐべき : デフォルトの名無しさん [sage] 2018/02/20(火) 21:13:27.65:qLAJwQw3 やっぱり、そう思いますよねー ちなみに10シート1000行50列をそれぞれ入力規則10種に違反しているものは無いかくまなく調べる… みたいなマクロなんですけど 開発者は条件分岐はとりあえずIf文をネストすれば良いみたいな考え方らしくSelect文がゼロなんですよ これってなんか工夫できそうな気がするんですけど まぁもうちょっと分析してみます : デフォルトの名無しさん [sage] 2018/02/20(火) 21:20:14.98:qLAJwQw3 ごめんなさいIDかわりました : デフォルトの名無しさん [sage] 2018/02/20(火) 21:36:39.55:egNrIJ1q たぶんループ内でセルアクセスしまくってるだろうから 一気に取ってきてメモリで処理して結果をズドン にすれば1000倍オーダーで高速化するでしょう 健闘をいのる : デフォルトの名無しさん [] 2018/02/20(火) 21:45:10.31:Qs1V/krE とりあえず親分を立ててSSDにする ↓ ほとんど全て作業が快適になるけど肝心のマクロは変わらず ↓ やっぱりCPUか、でPC新調する ↓ もったいないので新PCにSSD載せる ↓ マクロも他の作業も爆速になる これしかないやろ : デフォルトの名無しさん [sage] 2018/02/20(火) 21:51:41.56:qLAJwQw3 セルアクセス!初耳にして今後のキーワードになりそうな言葉です! がんばります! そこまで景気よく行けたらいいなぁ… : デフォルトの名無しさん [sage] 2018/02/20(火) 22:19:42.59:kZvvD5Jp セル.valueを一旦全部配列に取り込んで メモリ上で処理して 配列を最後にまとめて貼り付けれ 画面描画とイベント抑止も追加な : デフォルトの名無しさん [sage] 2018/02/21(水) 07:37:11.81:pdEcbkjv まぁIf文でもSelect文でも使いどころが見合ってればいいけど それより気を付けなければいけないのはOrやAndの扱いだね。 .Net系のOrElseやAndAlsoと違って前に設定した条件を満たしていても後続の条件を評価してしまう。 まだ単純な値を比較するなら誤差程度の時間差しか出ないけど 関数やメソッドの戻り値を条件にしていて、 その関数が重い処理であればそれだけ無駄な時間が掛かってしまう。 後はもしクラスに詳しければポリモーフィズムでなるべく無駄な分岐は避けた方が良いかな。 その分処理時間だけでなく改修やテストの時間も削減が見込める。 : デフォルトの名無しさん [] 2018/02/21(水) 23:14:40.16:y7Un/hTJ 処理時間の高速化が目的なら セル範囲をバリアント型配列に代入して配列内で処理をしてから、処理後の結果を配列からセル範囲に出力すれば劇的に早くなるよ : デフォルトの名無しさん [sage] 2018/02/22(木) 01:57:42.07:gwSYBKpq エクセルで家計簿作りたいんだけど、みんなどうしてるん? ものすっごい管理するのが面倒くさくなるんだけど… 家計簿を複式で書きたいから毎回商品名やら収入支出まで全部書くんだけど、 最近面倒臭くなってきたからこの辺の操作を簡略化したいのよ 商品名を全部書くのが面倒くさいから大雑把な商品項目を作って 商品項目の選択制にしたいんだけどどうすりゃいいんだ? 例えば、お茶買ったとしたら、飲み物って項目を選択して 収入支出のどっちかを選択して金額を入れればいいだけ、みたいな あと、飲み物のグループだけを表示できるようにしたりもしたい 自分がその月に何にお金を一番使ってるのか項目毎に分析したいんだ : デフォルトの名無しさん [sage] 2018/02/22(木) 05:34:45.99:6+gpZmum ユーザーフォーム作って選択すればいいんじゃね? あとはKey に該当する商品だけ合計するとかでおk : デフォルトの名無しさん [sage] 2018/02/22(木) 07:11:07.10:/kJbMS0V セルを選択形式にしたいなら「入力規制」でググれ だがその項目を決まった位置に書いておけば それすら必要ないように思える。 多分VBA必要ない。 : デフォルトの名無しさん [] 2018/02/22(木) 07:13:19.54 つ 「エクセル簿記」 : デフォルトの名無しさん [sage] 2018/02/22(木) 07:17:47.39:FxhP8B8J > 自分がその月に何にお金を一番使ってるのか項目毎に分析したいんだ スレチになるけどそう言う目的あるならフリーの家計簿ソフト使った方がいいと思うよ : デフォルトの名無しさん [] 2018/02/22(木) 08:05:56.18:YVYiWWcv フリーの家計簿ソフトなんて作ってるのはみんなみたいな奴だぜ オレオレ便利機能が欲しいから作っちゃいましたみたいな 家計簿なんてそんなもん 作れるなら自分で作っちゃうアプローチのが正解 : デフォルトの名無しさん [sage] 2018/02/22(木) 10:32:45.75:jLYjEY9/ さらにスレチだけど、そもそも複式で書く意味って? 支出と費用計上のタイミングがずれる 収入と収益計上のタイミングがずれる なんてことがある場合に複式の利点があるんだろうけど そもそも家計簿作る人ってそこまでやんの? 米を10kg買ってきました 資産計上します 消費の都度費用計上しますとか? : デフォルトの名無しさん [] 2018/02/22(木) 18:43:19.33:VgNmulNi アスペ感強すぎwww : デフォルトの名無しさん [sage] 2018/02/22(木) 19:08:12.44:K6gwUVsb 家計簿の無料アプリなんて、いくらでもあるだろ 既にあるものは作るな。 世の中に無いものを作れ : デフォルトの名無しさん [sage] 2018/02/22(木) 19:45:49.11:1JOjbwTy ほんと定期的にやばそうな人くるよな : デフォルトの名無しさん [sage] 2018/02/22(木) 21:13:28.78:c7GHDdxz ++や+=や?みたいな演算子ないんでしょうか? 毎回代入やifしないと駄目? : デフォルトの名無しさん [sage] 2018/02/22(木) 21:36:57.24:UMUr68HJ だめ : デフォルトの名無しさん [sage] 2018/02/22(木) 21:45:28.24:c7GHDdxz ありがとう 不便だなあ…('A`) : デフォルトの名無しさん [sage] 2018/02/22(木) 22:03:55.07:/kJbMS0V 不便だよ 不便なところをどうやって何とかするのかを 考えるのもVBAの醍醐味 : デフォルトの名無しさん [sage] 2018/02/22(木) 22:05:36.37:6NHeYF5q ?:(三項演算子)はIIf( )で似たようなことができる ただしC++の三項演算子と違って関数だから引数はすべて評価される なので a = 0 b = IIf(a <> 0, 1 / a, 0) とかやると0割りエラーになるので注意 : デフォルトの名無しさん [sage] 2018/02/22(木) 22:31:32.98:rSjpq6iH And や Or も前件だけで真偽判定してくれなくて全文評価するから不便だよな : デフォルトの名無しさん [sage] 2018/02/22(木) 22:44:59.91:Dms0Es6m 条件式は1本にまとめるよりIfをネストした方が処理が速いこともあるし C#なんかとは考え方をまるっきり変えてコーディングしないと : デフォルトの名無しさん [sage] 2018/02/23(金) 00:01:36.17:aLU7NSfS その内LINQやラムダ式が使えないから不便だって言う人が出てきそうな勢いだな Pythoneまで待てや : デフォルトの名無しさん [sage] 2018/02/23(金) 08:52:34.86:AfM26Mh3 「プログラミング環境なんて数年おきに改訂され進化していくもの」 という感覚は正しい。 しかしあたりまえが通じない世界もある。 それが、「廃れた開発環境」と「リソースの足りないプロジェクト」だ。 : デフォルトの名無しさん [] 2018/02/23(金) 12:15:48.66:E8zJnigo どしたの急に? : デフォルトの名無しさん [sage] 2018/02/23(金) 12:32:39.13:AiDQ1wxe Excel2010以降で、コンテキストメニュー追加するとき commandbars().add でコメントを右クリックした時のメニューは()の中は何になりますか? : デフォルトの名無しさん [] 2018/02/23(金) 22:05:45.08 コメントを右クリックの意味がわからん : デフォルトの名無しさん [] 2018/02/23(金) 22:09:49.60:NDjRlvGW まずコメントって知ってるか? : デフォルトの名無しさん [sage] 2018/02/23(金) 22:21:14.89:LlcGT0P+ 日本語崩壊しててワロタ : デフォルトの名無しさん [] 2018/02/24(土) 00:24:56.44 ひょっとして、無指定だと何のショートカットキーが表示されるか(「開く(O)」みたいなの)を聞きたいのではなく(表示されないやろ…てか試せばよくね?と思ってた)、 commandbarsの引数に何を指定すればVBAのエディタのコメントを右クリックしたときのコンテキストメニューに項目を追加できますか?っていう質問なのか? 何の質問をしているのかまったく分からなかったが、がんばって一番意味が通りそうな解釈をしてみた : デフォルトの名無しさん [] 2018/02/24(土) 00:54:26.24:S7UxFmQS よく頑張った、もう少しで賞を差し上げます : デフォルトの名無しさん [] 2018/02/24(土) 03:12:36.02:Cy5WZ5pS どなたか知恵をください 日本語IMEの変換候補がドロップダウンリストで出てくるアレを 区切り記号入れて(カンマがいいかな) 一つのセルに列挙できませんかね? 例えばA1に半角英で「yama」と入力したら B1に「山,ヤマ,やま,耶麻,耶摩,八馬,矢間」みたいな : デフォルトの名無しさん [sage] 2018/02/24(土) 03:35:37.11:39HZSDcZ できる 基本的にはImmGetCandidateListかImmGetConversionListを使う IMEの制御はドロ沼だからあんまり完璧を求めないようにほどほどにな : デフォルトの名無しさん [] 2018/02/24(土) 04:09:09.96:Cy5WZ5pS 即レスありがと! そこのリファレンス読んでくるわ! : デフォルトの名無しさん [] 2018/02/24(土) 23:15:34.68:KQx6tQtJ MACでエクセルを使用して、ボタンクリックでphpを実行させてデータを取得してエクセル に出力する方法を教えて下さい。 : デフォルトの名無しさん [sage] 2018/02/25(日) 02:02:21.78:fGofbzeE モスじゃだめなのかい? : デフォルトの名無しさん [] 2018/02/25(日) 07:39:33.73:tVogG6Wu 寒っ : デフォルトの名無しさん [sage] 2018/02/25(日) 10:24:12.12:jtYvuOjV 今日は暖かいよ : デフォルトの名無しさん [] 2018/02/25(日) 10:56:06.58:tVogG6Wu 寒っ寒っ!! : デフォルトの名無しさん [sage] 2018/02/25(日) 11:00:26.62:fGofbzeE そだねー : デフォルトの名無しさん [] 2018/02/25(日) 17:02:52.72:TpkMAgUG ここはエクセルの質問スレちゃうの?、あほばっかだな。 : デフォルトの名無しさん [sage] 2018/02/25(日) 19:21:52.64:eyGxL2ZU ソダネー : デフォルトの名無しさん [sage] 2018/02/25(日) 19:54:07.26:UkkX22dp スレタイ読めが判ると思うが : デフォルトの名無しさん [] 2018/02/25(日) 20:22:35.82:JQVcjONo 10万件くらいのリストを作ってそれをある規則で並べかえたいんだけど、一番高速で行うにはどういう手法がありますか? : デフォルトの名無しさん [sage] 2018/02/25(日) 20:39:07.10:uEiWTozj お前がやらずに、出来る奴に キチンと敬意と対価を払って やってもらう ノウとかハウとかは後で身に付けたらいい : デフォルトの名無しさん [] 2018/02/25(日) 20:53:22.41 ggrks ([g]oogleでし[r]べてみた[k]っかです[s]んこうにしてね) ttp://excel-ubara.com/excelvba4/EXCEL270.html : デフォルトの名無しさん [] 2018/02/26(月) 07:46:27.51:nDommPCV すみません ありがとうございました : デフォルトの名無しさん [sage] 2018/02/26(月) 10:23:38.67:2Ht8owgk いいってことよ(´・ω・`)b : デフォルトの名無しさん [sage] 2018/02/26(月) 17:52:12.51:NcBRNf65 Ruby なら、VBA より速いし、そんなに難しくない : デフォルトの名無しさん [sage] 2018/02/26(月) 18:56:12.78:+OqK48cA Worksheet_SelectionChangeのコード中に、 If Target.Count=1 then Exit Sub のところで今日急にオーバーフローのエラーが出るようになって ちょっとググったらCountLargeというのがあることを知ってとりあえず解決したんだけど 一つのセルしか選択肢てないのに・・・ ウォッチ式にTargetを追加して確認したらTargetの中にItemはひとつしかないのにTarget.Countはオーバーフローってなんだこれ? : デフォルトの名無しさん [sage] 2018/02/27(火) 23:52:36.36:ht7HfYcX コピー禁止 Private Sub Worksheet_SelectionChange(ByVal Target As Range) Application.CutCopyMode = False End Sub コピー→別のファイル(Excelなど)に貼り付けが出来てしまう コピー→マウスを動かすだけでキャンセルするようなVBAはないよね、、、。 : デフォルトの名無しさん [sage] 2018/02/28(水) 01:32:02.58:urFvMZOz APIでクリップボード自体をクリアしたらダメかね : デフォルトの名無しさん [sage] 2018/02/28(水) 01:36:53.98:Ddk6veDH コメントアウトのコメントじゃなくてセルに付与するコメントのことだぞ : デフォルトの名無しさん [sage] 2018/02/28(水) 05:54:26.44:PdZXKZv3 フォルダに大量に入ってる動画ファイルの名前と容量を抽出してエクセルファイルに出力したり出来ませんか? : デフォルトの名無しさん [sage] 2018/02/28(水) 06:16:52.08:9FYD/BHY できらぁ!! : デフォルトの名無しさん [] 2018/02/28(水) 07:17:25.76 VBAにできないことなんてないぞ : デフォルトの名無しさん [] 2018/02/28(水) 07:39:47.81:6WnrRHIY え!!VBAでファイルの名前と容量の抽出を!? : デフォルトの名無しさん [sage] 2018/02/28(水) 07:42:05.80:XToZbbWL とりあえずファイル操作は全部FSO使っておけば何とでもなる : デフォルトの名無しさん [] 2018/02/28(水) 08:04:41.58:9Zs6j1Ub ちょっと横からで申し訳ないです に似たようなことをFSOでフォルダ内のファイルを数万件取得していて、foreachで一つずつ配列にいれてるんだけどかなり時間がかかる。。一括で取得する方法とかありますかね? : デフォルトの名無しさん [sage] 2018/02/28(水) 08:08:27.77:Aj9baD3x 配列に入れないで処理する方法を考える : デフォルトの名無しさん [sage] 2018/02/28(水) 08:11:14.51:mCK56HVf エロ動画フォルダに入ってるファイルサイズ取得して一致したらかたっぽを削除するマクロ作ったわ : デフォルトの名無しさん [sage] 2018/02/28(水) 08:23:05.93:5dUEHtJL そんなもんフリーソフト落としてくるだけで出来るわ。 一覧表に起こしてアレコレしたいときに捗る : デフォルトの名無しさん [sage] 2018/02/28(水) 09:22:10.92:2zUSyVD3 朝っぱらから元気で草 : デフォルトの名無しさん [sage] 2018/02/28(水) 18:29:56.39:EAuLwM42 エロ動画を大量に集めすぎてどこに何があるか微妙にすぐ見つけれなくなった俺と同じ悩みなんだろうか : デフォルトの名無しさん [sage] 2018/02/28(水) 19:15:28.02:Tb7VJEa0 Function func(ByVal arg) As int 処理 End Function Dim var As Function var = address(func) Call var(argument) みたいに、関数へのポインタでコールするのはどう書くの。 : デフォルトの名無しさん [] 2018/02/28(水) 20:22:58.19:6WnrRHIY Dim var As Object Set var = Ref(func) Call ByRef var(argument) : デフォルトの名無しさん [sage] 2018/02/28(水) 22:29:15.05:ugxprRf8 PowerShell なら以下で、ファイル名・サイズを、カンマ区切りで表示できる cd で、そのフォルダへ移動してから、 ls | %{ $_.Name + "," + $_.Length } 結果をファイルに出力するなら、 ls | %{ $_.Name + "," + $_.Length } > ファイル名 出力 test01.rb,341 test02.rb,216 test03.rb,453 : デフォルトの名無しさん [] 2018/03/01(木) 22:00:03.32:AveIjfm9 エクセルに出力できとらんやんw : デフォルトの名無しさん [] 2018/03/01(木) 22:10:39.18 結果をファイルに出力するなら、 ls | %{ $_.Name + "," + $_.Length } > ファイル名.csv : デフォルトの名無しさん [] 2018/03/01(木) 22:22:42.13:AveIjfm9 でたwwwエクセルとcsvの区別がついてない奴wwwww : デフォルトの名無しさん [sage] 2018/03/02(金) 07:10:15.29:8gOr4FTA ブックオープン時にフォームだけ開きたい場合ってどうしたらいい? : デフォルトの名無しさん [] 2018/03/02(金) 07:17:55.07 [表示]-[ウィンドウ]-[非表示] : デフォルトの名無しさん [sage] 2018/03/02(金) 08:53:24.56:NzNuwPhv クラス継承前提で設計してしまったのだが、どうしてくれるの。 : デフォルトの名無しさん [sage] 2018/03/02(金) 09:38:57.79:5NrcBP5g お前がマヌケだったって事だろ。 作り直せ : デフォルトの名無しさん [] 2018/03/02(金) 12:05:11.13 ポリモーフィズムはImplementsがあるから、あとはどうにでも工夫できるやろ : デフォルトの名無しさん [] 2018/03/02(金) 19:00:30.03:ALTNLkg9 コピペは攻守ともに最強の継承やぞ : デフォルトの名無しさん [sage] 2018/03/02(金) 21:57:53.05:YGnqgkH5 スーパークラス作ってそれをオーバーライドしてけば省力化できると思ったのかな? : デフォルトの名無しさん [] 2018/03/02(金) 22:07:46.54 省力化は委譲で代替できる : デフォルトの名無しさん [] 2018/03/02(金) 22:19:05.00:ALTNLkg9 え?委譲で省力化を!? : デフォルトの名無しさん [sage] 2018/03/03(土) 08:40:25.03:xibgNHFN 正直VBAのクラスは他のObject指向言語に比べるとその辺見劣りするのは仕方ない。元々構造化言語だし。 そこをどうするかを考えて行くのが醍醐味でもあるんだけど やっぱり移譲にも限界があって例えばフォームを継承してもっと機能を追加したり変更したりしたいとき、 .Net系であれば単純に継承してメソッドやプロパティを追加やオーバーライドすれば良いものが、 移譲の場合は全て呼出し口を設定しなければならなかったりするので こういう場合は余り現実的とは言えない。 移譲や継承を使うのとはまた違った方法を考える必要があるんだけど それを考えるのもまた醍醐味。 : デフォルトの名無しさん [sage] 2018/03/03(土) 09:00:54.41:QwmpO0ZF >醍醐味 プックスクス : デフォルトの名無しさん [sage] 2018/03/03(土) 09:05:29.61:CziLTh5W 他に現実的な解法が無いからVBA使っているだけで、誰も好んで使っているわけではないんだけど、 かといって自分の無能を全てVBAのせいにしている発言を見るとイラッとするのは確か : デフォルトの名無しさん [sage] 2018/03/03(土) 11:49:03.81:Rcnk03vE ☆ミ DAIGOアジ ☆ミ : デフォルトの名無しさん [sage] 2018/03/03(土) 12:45:47.64:axcuG9mm 完全に割り切って ByVal As Object または ByVal As Variant で委譲オンリー : デフォルトの名無しさん [sage] 2018/03/03(土) 14:19:14.14:axcuG9mm 間違えた ByVal As Object または ByRef As Variant : デフォルトの名無しさん [] 2018/03/04(日) 00:55:22.93:DAVLACwj それのどこが醍醐味なの? : デフォルトの名無しさん [sage] 2018/03/04(日) 09:54:22.41:K2njBMWG エクセルのマクロちょいちょいと組み立てて自動化させたら ズルをするな、計算機でちゃんと計算して打ち込め って怒られた 意味わかんねー : デフォルトの名無しさん [sage] 2018/03/04(日) 09:58:17.84:3XS25AQI 計算機 : デフォルトの名無しさん [sage] 2018/03/04(日) 10:02:50.11:aHerEJAV パソコンが登場し始めた前世紀になら居ただろうけど、このご時世だと信じがたいわな : デフォルトの名無しさん [sage] 2018/03/04(日) 10:39:41.20:/M0AdgD3 その手の輩は 1.そんなもんを自動化したら 工数がへるから残業する理由が なくなるだろ 2.人月商売なのに何で利益減らす行為するん 3.手作り、真心込めて、おもてなし さて、どれ? : デフォルトの名無しさん [sage] 2018/03/04(日) 10:51:00.13:6PsP9d9s 単なるバカ : デフォルトの名無しさん [sage] 2018/03/04(日) 10:55:35.55:m9Z0+hmg >計算機でちゃんと計算して打ち込め いや〜、そこまで言うなら計算機なんて信じず算盤で計算しろ が正しいでしょ w : デフォルトの名無しさん [sage] 2018/03/04(日) 11:30:31.21:7ZGw1DO5 今の時代でも、碌にパソコン使えないくせに、やたらパソコンで作業したがるおじさん・若手はいるし ああいう人たちが「下手にパソコン使わせると遅くなる」ってイメージを植え付けているのかもしれない あとマクロ組む工程までいれると、さして時間短縮になっていない人とか : デフォルトの名無しさん [] 2018/03/04(日) 12:45:40.43:nY2/C6yI 自己満なんやからええやんけ : デフォルトの名無しさん [sage] 2018/03/04(日) 14:52:14.27:6GOtxg/5 内製にせよ外注するにせよ他人にマクロ作ってもらうとなると時間も経費もかかるし、改修も容易じゃないからな 多少時間かかってもマクロを自分で組めた方が楽なのは間違いないけどね 管理職のくせにマクロの効用を理解できないような奴が、マクロ実装にかかる時間だけを見て手間がかかるからやめろとか言ってくることが結構あるからな : デフォルトの名無しさん [] 2018/03/04(日) 15:51:22.29:DAVLACwj 結構あるってことはみんなお前のマクロにはもう懲り懲りなんじゃないの? : デフォルトの名無しさん [sage] 2018/03/04(日) 15:59:46.94:ewEnZjbB エクセルマクロだと正しいか間違ってるかの判断が(上司にとって)出来ない 上司が使えないプログラミング言語は禁止ねっていうのと同じ種類の問題だと思うよ : デフォルトの名無しさん [sage] 2018/03/04(日) 17:55:29.98:ibRKmML9 マクロは自分用だとすごく便利 他人が作りっぱなしにしたマクロをだましだまし使うのは地獄 : デフォルトの名無しさん [sage] 2018/03/04(日) 18:24:28.65:jmE3cBn5 エラーハンドリング全然されず Sheet の初期化(単なるクリア)も 人間がやらないとダメな仕様 のマクロに機能拡張しろってのが あったけどとりあえず5分で チンカスであることを強調した上でC#で作り直した思い出 : デフォルトの名無しさん [] 2018/03/04(日) 19:26:15.30 自分だけでこっそり使うんならいざしらず、 他人に使ってもらいたいんなら 使ってもらえるような作り方&ドキュメント整備しろってことだな : デフォルトの名無しさん [sage] 2018/03/04(日) 20:05:19.79:IczeIIEA エクセルは説明書ページを簡単に添付できる(シート追加するだけ)のがいい EXE形式だとreadme.txtやHELPなんて読んでもらえないしな まぁ、エクセルで説明ページがあってもよまないやつがおおいから結局コメント機能使いまくりだったり 画面上に説明書いちゃうけど : デフォルトの名無しさん [sage] 2018/03/04(日) 20:22:52.23:DWVE2Vb5 もっぱらpowershellやvbscriptで書いてる 元のワークブック汚さずに済むし : デフォルトの名無しさん [sage] 2018/03/04(日) 22:51:58.52:a3KsBQsp ちなみにどう使い分けしてる? powershell 使い始めたんだけど思うような動作しなくて、結局vbsでいいやってなっちゃう。 : デフォルトの名無しさん [sage] 2018/03/04(日) 22:53:07.28:a3KsBQsp ちなみにどう使い分けしてる? powershell 使い始めたんだけど思うような動作しなくて、結局vbsでいいやってなっちゃう。 : デフォルトの名無しさん [sage] 2018/03/04(日) 23:02:24.00:XOwF/6X2 デバッグ中に別シートに集計中なのに 元データのシートを破壊してしまって涙目 アクティブシートのカレントリージョンをクリアで綺麗サッパリ(´Д`) : デフォルトの名無しさん [] 2018/03/04(日) 23:41:13.27:DAVLACwj マクロはおめえのオモチャじゃねえんだよ これに懲りたらスッパリとマクロから足を洗うんだな : デフォルトの名無しさん [sage] 2018/03/05(月) 10:31:45.26:Bgh1BGUs マクロは個人のオモチャでいいだろう 性能や信頼性は作り手による : デフォルトの名無しさん [] 2018/03/05(月) 12:18:46.09:Qtnfm99f 何開き直っとんねんお前もマクロいじるの禁止な : デフォルトの名無しさん [sage] 2018/03/05(月) 13:06:15.33:RmFDDOch 糞マクロでもいいじゃない だって人間だもの げいつ : デフォルトの名無しさん [sage] 2018/03/05(月) 16:20:35.95:Bgh1BGUs マクロは個人のものだと言っとるだろうが 他人に直接影響を及ぼさないんだから禁止もへったくれもない : デフォルトの名無しさん [] 2018/03/05(月) 19:21:30.95:2ygytXOa エクセルVBAのグラフの範囲指定Rows.Countで困っております。 お力添え頂きたくお願いしたいです。 A1からD600まで範囲指定して、K1からK600 までをVBAで範囲指定したいのですが、 なお601行目はすべて空白で、602行目には合計数が入っています。 600行目というのは日によって異なり入力値の最大数がばらばらです。 手動でやる際は A1をターゲットし、Shift →×4、CTRL+SHIFT+↓、 CTRLを押しながらK1をターゲットCTRL+SHIFT+↓で選択。 これをVBAに置き換えるために行ったのですが 某サイトで Set Target = Union(Range(Range("A1"), Cells(Rows.Count, 4).End(xlUp)), _ Range(Range("K1"), Cells(Rows.Count, 11).End(xlUp))) というような指定方法がありましたので行ってみましたが 合計数が入力されている602行目が範囲に含まれており困っております。 A1:D600(空白まで),K1:K600(空白まで) というように指定するにはどのようにすればよいでしょか。 : デフォルトの名無しさん [sage] 2018/03/05(月) 19:32:56.50:AenKmQiD じゃないけど俺は新規作成はPowerShellに一本化した まだちょっとはあ?ってなる挙動があるけどやりたいことはだいたいできてる : デフォルトの名無しさん [sage] 2018/03/05(月) 21:32:20.85:2t/pwmDg Range("a1").CurrentRegion Range("k1").CurrentRegion でやってみよう : デフォルトの名無しさん [sage] 2018/03/05(月) 21:48:18.83:2t/pwmDg 言い忘れたけど A〜DとKが表としてつながってない想定ね 一つの表からなら Range(Range("a1"), Range("d1").End(xlDown)) Range(Range("k1"), Range("k1").End(xlDown)) でそれぞれの範囲をとれる : デフォルトの名無しさん [] 2018/03/05(月) 22:25:16.54:2ygytXOa ありがとうございます。 2つ目に書いていただいた表が一個の場合を想定しています。 Rangeで行う事が出来るのですね。 Cells(Rows.Count, 4).End(xlUp)をxlDwonに 変えてもダメだったのでかなり絶望してました。 A1〜A20とかに書かれている条件でそれが含まれていたら↓を検索するとかも これでできそうな気がしてきました。 ありがとうございました。 : Excel→MySQL [] 2018/03/06(火) 01:06:36.39:fiBtEf92 すみません、あまり仕組みがよくわからず こちらに質問致します。 やり方の案内でも助かります。 Excelかtxtのデータをシート上に配置したボタンワンクリックで →MySQLにアップデートって出来ますか? バーコードリーダー等のlogファイル xls,csv,txt ―――A――――B 1、barcode 棚卸数 2、9876543, 21 3、1234567,89 MySQLデータベース 1、メーカ、型番、コード、品名、在庫数 2、Pansomy,THE123,9876543,USOメモリー,3 3、Hitasun,END987,1234567,モバテリー,7 在庫数を棚卸数で上書きが出来れば良いです。 よろしくお願いいたします。 : デフォルトの名無しさん [sage] 2018/03/06(火) 07:49:34.86:RSFFAx7v なるほど。 VBSはドラッグ&ドロップが使いやすいが終息方向。 VBAは開発しやすいがあくまでオフィスの製品ありき。 pythonは流行ってるが会社のマシンにデフォで入ってない。 導入のしやすさ、汎用性からpowershell かなあ。ただ動作が遅いのが気になるけど : デフォルトの名無しさん [sage] 2018/03/06(火) 08:23:29.61:Djyon39L 最終行取得する時って、おまえらどっち派? : デフォルトの名無しさん [sage] 2018/03/06(火) 08:25:04.77:2b8pbF8x アレを使っちゃう派 誤取得する場合があるって聞くけどまだ未経験 : 295 [sage] 2018/03/06(火) 08:26:39.35:qLV0sr+i 『棚卸数の入力作業vba』(Masayo) エクセル Excel [エクセルの学校] www.excel.studio-kazu.jp こちらのサイトを参考に ttp://www.excel.studio-kazu.jp/kw/20111019173742.html VBAのマクロをボタン登録で エクセルのbook 内のsheet2セルからsheet1に書き込む事は出来るのですが、 powershell?が何なのか知りませんがそれで可能ならそれでも良いです。 ボタンを押すとインポートファイルを指定できる物でも良いのですが、 ただ、PhpMyAdminからの操作が素人には難しくてめんどうなので、 ログファイルをドラッグドロップでアップデートかボタン1つでやれないかと思います。 VBSや.hta(html application)でMySQLにアクセスする方法とかでも良いです。 ログファイル名とフォルダが固定ならスケジュール自動化も視野にしたいです。 よろしくお願いいたします。 : デフォルトの名無しさん [sage] 2018/03/06(火) 08:31:48.14:2b8pbF8x ODBCの存在を知らないとかそういう話? ttps://qiita.com/msano/items/fdcc0cbb8e41b988ce2d もしくはySQLコマンドラインツールでもできると思う : 295 [] 2018/03/06(火) 08:50:29.68:qLV0sr+i ODBCを使うんですか?ありがとうございます。 具体的な使い方がわからないので、ご提示のサイトで勉強したいと思います。 >ySQLコマンドラインツール マウスかタッチパネル操作のみのおじいちゃんでも出来ますか? : 295 [] 2018/03/06(火) 10:37:26.93:qLV0sr+i ご紹介頂いたページを見てみました。 誠に申し訳ないのですが ログのcsvファイルを新規でMySQLのテーブルに入れたい訳ではなく、 ExcelにMySQLからデータをダウンロードしたいのでも有りません。 確かにsheet1にMySQLからのダウンロードは可能です、sheet2にcsvのファイルも準備できます。 そして、先のVBAを用いてsheet2からsheet1の書き換えと消し込みが出来ましたが、 sheet1の書き換え後のデータをMySQLに戻すには 一旦csvで保存して、MySQLのテーブルをdrop かtruncate してから 書き換え保存したcsvをMySQLにインポートするしか無いのでしょうか? : デフォルトの名無しさん [sage] 2018/03/06(火) 10:58:38.66:o11Cbfr7 ケースバイケース 空白もカウントしたいかどうかで方法を変える : デフォルトの名無しさん [sage] 2018/03/06(火) 12:48:25.53:Z8jG7st4 ケースバイケース 特に他人が作った表にマクロ仕込むときはそう エクセルスキルがない奴が作るデータは表の配置が本当に酷いから、目で確認しないと意図した通りのセルにアクセスできないことが多い : デフォルトの名無しさん [sage] 2018/03/06(火) 15:34:28.04:907OdX1W 先生、どうかご指導お願いします。 得意先名が記載してある列に対して 営業所や支店を削除して整理したいと考えてます 下記はAAA梶Z〇営業所という社名、営業署名を AAA鰍ニ置き換えようとして作成しているマクロです 下記のようにワイルドカードを使って置き換えようとすると スルーされてしまって変換できません どうしたらスルーせずに変換できるようになるでしょうか? Dim Mrow, TOcol, i, t As Long Dim Mrange As Range Mrow = Cells(Rows.Count, 1).End(xlUp).Row TOcol = Rows(1).Find(what:="得意先", lookat:=xlWhole).Column Range(Cells(2, TOcol), Cells(Mrow, TOcol)).Select For Each Mrange In Selection Mrange.Value = Replace(Mrange.Value, "AAA*", "AAA") Next Mrange : デフォルトの名無しさん [sage] 2018/03/06(火) 15:40:08.21:Kz9r/khc Replaceにワイルドカードに対応した機能なんてあったっけ? : デフォルトの名無しさん [sage] 2018/03/06(火) 16:55:46.30:syG3HE1y 素直に置換窓でしたら? って愚問かしら : デフォルトの名無しさん [sage] 2018/03/06(火) 17:00:18.43:o11Cbfr7 Mrange.Value = Split(Mrange.Value, "")(0) & "" : デフォルトの名無しさん [sage] 2018/03/06(火) 17:10:48.55:Kz9r/khc 楽したいときはそれよくやる : デフォルトの名無しさん [sage] 2018/03/06(火) 17:44:23.62:RSFFAx7v これマクロでやる必要あるのかな、関数でやる方が早くて楽だと思うけど。 : デフォルトの名無しさん [sage] 2018/03/06(火) 18:07:44.86:J8w9cnP2 ここで詳しく説明したくない何かがあるのさきっと : デフォルトの名無しさん [sage] 2018/03/06(火) 19:04:37.73:907OdX1W どうもありがとうございました! 関数使ってしまうと私しか操作ができないので CSVで読み込んだらボタン一つで誰でも結果が出せるようにしたかったのです^^ どもありがとうございました! : デフォルトの名無しさん [sage] 2018/03/07(水) 01:38:36.16:x26Og5c6 これInStrとLeft使えば済む話だろ : デフォルトの名無しさん [sage] 2018/03/07(水) 07:52:35.02:dk6C+v+n この程度の動作でわざわざマクロ組んでボタン付けるのって無駄な気がするけど。 実際は複雑な条件分岐でもあるのかな。 大量にcsvがあるなら、一人で一括処理した方が早いし。 複数人で手分けするにしてもこれアドインで配るのか。 イマイチ作業がピンとこないな。 : デフォルトの名無しさん [] 2018/03/07(水) 07:57:02.27:g1VMydGw 頭が悪いだけだから気にすんな : デフォルトの名無しさん [] 2018/03/07(水) 08:25:40.94 業務アプリからCSV吐き出してExcelでインポートする定型業務なんだろ : デフォルトの名無しさん [sage] 2018/03/07(水) 12:27:05.35:ITQ9LWXL Mrange.Replace what:="AAA*", replacement:="AAA" : デフォルトの名無しさん [sage] 2018/03/07(水) 18:33:39.24:jNQbCOPg そういう感じか。 自分なら作業フォルダ決めて、そこに突っ込んだファイルでループ回して一括処理するな。 配布するならVBSでドロップしたら処理するようにしとく。 とりあえずボタンなどつけず、不可視でやった方が効率いいと思うな。 : デフォルトの名無しさん [] 2018/03/07(水) 20:37:03.79:fiBk/l1y 終わった問題にくどくど文句言ってんじゃねえよバカw : デフォルトの名無しさん [sage] 2018/03/09(金) 05:37:29.78:Ioc33b8P あるURLからsendkeysでctrl+a ,ctrl +cで全画面をコピーし、セルに貼り付けたいのですが、macなのでIEが使えず、困っています。 どなたかわかる方いらっしゃいますか?? : デフォルトの名無しさん [sage] 2018/03/09(金) 07:17:33.28:iKQibMl2 社内で使ってるソフトがVB6で動いてるんだけど、見直すことになって中身見てるんだけど変数宣言してなかったり変数名なのかコントロールなのか分からんしGOtoで飛びまくってあっちゃこっちゃ移動して見辛いのをキレイに直す近道は何かね? : デフォルトの名無しさん [sage] 2018/03/09(金) 07:53:39.76:KC7p8RhA 全面作り直し : デフォルトの名無しさん [sage] 2018/03/09(金) 08:09:53.68:p11XwhXH ついでにc#にでも書き換えたら : デフォルトの名無しさん [] 2018/03/09(金) 08:21:10.99 一度に一つのポイントに絞って直していくといいよ。 たとえば、コントロール名の命名規則を全体的に統一、 動作確認、変数宣言強制、動作確認、 GoToを排除(関数切り出しやループ構文)、動作確認、 で、機能・動作は同じままで中身が綺麗になったら C#やらPythonやらに移植するのもいいかもね。 : デフォルトの名無しさん [sage] 2018/03/09(金) 10:05:38.77:iKQibMl2 やっぱそういうかんじですよね。ゆくゆくC♯にはするつもりです。 : デフォルトの名無しさん [sage] 2018/03/09(金) 12:03:12.65:f4+dGRtD 普通放置するだろ : デフォルトの名無しさん [sage] 2018/03/09(金) 12:07:04.28:iKQibMl2 ″¥工*.*″ これどういう意味? : デフォルトの名無しさん [sage] 2018/03/09(金) 12:10:16.16:49Hhyu8r ワイルドカード 文字列 で、ググれ : デフォルトの名無しさん [sage] 2018/03/09(金) 12:43:24.23:iKQibMl2 ″¥工(任意の文字列).(任意の文字列)″ って感じ? : デフォルトの名無しさん [sage] 2018/03/09(金) 12:54:06.72:D+ALvGrM goto文を切り離して呼び出して使おう : デフォルトの名無しさん [sage] 2018/03/09(金) 13:21:58.26:8uMVsz+u ExcelVBAパスワード解析(解除)が出来ないプロテクトをかける方法がないかな。 ※解除出来るVBAが出回ってる、、、。 ソースを見せろと上司から言われて困っています、、、。 : デフォルトの名無しさん [sage] 2018/03/09(金) 13:46:20.12:Bwgez1ze 業務として作ったものであれば上司の指示に従うべきかと : デフォルトの名無しさん [sage] 2018/03/09(金) 15:21:24.04:7ef4doJx その質問をここにするような馬鹿頭じゃ無理なんじゃ? : デフォルトの名無しさん [sage] 2018/03/09(金) 17:46:42.77:wpod4SXa 改善したことがすべて上司のおかげになってる。 上司のことを神様の存在?かな、、、。 わかりました。 ありがとうございました。 クソ会社を辞めてくる。 : デフォルトの名無しさん [sage] 2018/03/09(金) 17:56:22.24:f4+dGRtD つまり食い物にされている、と? : デフォルトの名無しさん [sage] 2018/03/09(金) 17:58:04.10:CekgNpjO まずは全てのコードの先頭にOption Explicitを入れて変数宣言をきちんとするところからかな : デフォルトの名無しさん [] 2018/03/09(金) 19:01:08.54:M2r/B6Zk 初心者って必ず言うよなw 誰に騙されとんのお前ら?w : デフォルトの名無しさん [sage] 2018/03/09(金) 19:33:16.36:CekgNpjO 自称玄人 w : デフォルトの名無しさん [sage] 2018/03/09(金) 20:27:41.68:f4+dGRtD 変数宣言をし忘れることはなくてもtypoのリスクはなくならないからな。 : デフォルトの名無しさん [sage] 2018/03/09(金) 20:50:54.71:qnoZKStj Visual Studioにコピペして修正すると捗る typoとかもチェックしてくれるし : デフォルトの名無しさん [sage] 2018/03/09(金) 21:09:01.46:BWrGum71 typoってそこまで問題になるかな。 マクロを大きな塊で作るとか、途中でテストしないとかじゃないと問題になるような発生の仕方しないと思うんだけど。 : デフォルトの名無しさん [sage] 2018/03/09(金) 21:27:32.88:Y3Dk8KBt 変数名ミスあるある 使ったことない関数と偶然同じ名前 よく似た変数をいくつも宣言してて、間違えたのにエラーにならない 逆に関数名をタイプミスして変数と解釈される : デフォルトの名無しさん [sage] 2018/03/09(金) 21:35:07.60:f4+dGRtD 大して問題にはならないと思うけど、多少は時間を浪費してしまうんじゃないか? : デフォルトの名無しさん [] 2018/03/09(金) 22:09:00.28 業務で作成したソースコードを隠すとか何考えてるの??? : デフォルトの名無しさん [sage] 2018/03/09(金) 23:06:24.40:s0Ox43/Q お昼休みや定時後サービス残業やプライベート潰して土日に頑張って作ったマクロだから他人に無償で差し出せと言われたら躊躇なく消し去る : デフォルトの名無しさん [] 2018/03/09(金) 23:10:16.18 じゃあ最初から作ったとか言わずに誰にもバレないようにこっそり使っとけ 頭のおかしな部下を持つ上司に同情するわ : デフォルトの名無しさん [sage] 2018/03/09(金) 23:30:45.58:s0Ox43/Q ソダネー : デフォルトの名無しさん [] 2018/03/09(金) 23:48:40.84:jpL8SCkU VBAというプログラミング言語は、昔からある枯れた技術だけど エクセルを使っていない職場は、無いと言えるぐらい普及しているから 業務のAI化の流れから需要が減る可能性は少ないだろうなあ : デフォルトの名無しさん [] 2018/03/10(土) 00:01:14.03:4nlfLUix エクセルよりお前の需要の心配しろよ能天気さんw : デフォルトの名無しさん [sage] 2018/03/10(土) 00:38:30.02:PZ/jlzJE パソコンによって紙が減るって言われていたのに印刷物が増えたように、 AI化するとカバー出来る業務が増えた結果、逆に忙しくなりそう。 : デフォルトの名無しさん [sage] 2018/03/10(土) 02:32:10.79:0GMAoiXq 超有能になったカイルが復活するか : デフォルトの名無しさん [sage] 2018/03/10(土) 09:24:51.95:AY0LzIsz パソコンによって誰でも気軽に印刷物を作成できるようになった だから紙の書類は増えたんだけど それ以上に母数となる書類は増えてるんだよ 印刷されてない電子書類の数も含めたら、やっぱり紙の書類の割合は減ってる : デフォルトの名無しさん [] 2018/03/10(土) 10:46:17.42:xR2Zob7T 割合なんかはじめから問題になってないってゆう : デフォルトの名無しさん [sage] 2018/03/10(土) 13:46:15.19:OgFFirzA 実際に減ったのは髪 : デフォルトの名無しさん [sage] 2018/03/10(土) 21:17:23.13:27Zew0ET Excel2013 デザインモードってONでもOFFでもどこが変わったのかわからないんだけど、 何が違うんですか? 検索したら、OFFの時はオブジェクトを右クリックしてもコード編集ができないとか書いてあって、 そんなことないんだけど! : デフォルトの名無しさん [sage] 2018/03/10(土) 21:32:40.22:/UsVOqQZ いいか、よく聞けよ 世の中には2種類のオブジェクトがあるんだ フォームコントロールと、ActiveXコントロールだ : デフォルトの名無しさん [sage] 2018/03/10(土) 21:57:01.21:27Zew0ET 知ってる。ActiveXコントロールの方は一切使わないんだよね。 : デフォルトの名無しさん [sage] 2018/03/11(日) 09:02:12.87:eeeFjAQk UserFormのオプションボタンが2つ(AとB)あったとします。 あるFrameのvisibleをFalseにしておいて、Bが選択された時だけTrueにしたいのですが、 @Bを選択→Frameが表示される AAを選択 BBの選択は解除されるが、Frameが表示されたまま になってしまいました。 Bの選択が解除されるのを認識させるにはどうしたらよいでしょうか? : デフォルトの名無しさん [sage] 2018/03/11(日) 09:10:40.94:WgDqrFTJ Bが選択された時だけTrueにしたのなら つぎは Aが選択された時にバルスにしたらいいんじゃないかい? : デフォルトの名無しさん [sage] 2018/03/11(日) 09:36:36.42:eeeFjAQk ありがとうございます。 ボタンは今後増やす予定で、 たとえば、ボタンCを追加した場合は、 A_Clickと同様にC_ClickにもBのバルスを追加する必要がありますよね。 ボタンを追加する度に同じ処理を入れるのはイマイチかと思いましたが、 このぐらいの1行で済む処理なら問題なしおですかね。 : デフォルトの名無しさん [] 2018/03/11(日) 11:12:45.26:1qbV0tMy やめろー 言うんじゃない、言うなー 作らせておいてちょっとミスると「こんなんだったら手作業でも一緒だよね」とかぬかしやがって。 朝まで電卓叩いて俺徹夜しましたオレ頑張ってますアピールしてろハゲ : デフォルトの名無しさん [sage] 2018/03/11(日) 12:00:11.76:3gQJTH+l ひょっとして:Changeイベント : デフォルトの名無しさん [] 2018/03/11(日) 13:16:00.78 Option Explicit Private Sub OptionButton1_Change() Frame1.Visible = OptionButton1 End Sub Private Sub UserForm_Initialize() Frame1.Visible = OptionButton1 End Sub : デフォルトの名無しさん [sage] 2018/03/11(日) 18:26:53.04:rR985EAX お、悪くない着眼点だねー。 都度分岐を増やすと手の入ったところは全て再テストし直しになるし その分岐がいろんなところに発生したら結構大変だよね。 いくつか方法があるよ。 例えば処理名とTRUE、FALSEの状態をシートに記載しておいて 処理に該当する状態を取得して設定する方法。 そういうことの出来る関数を一つ作っておいて 後は処理名を引数にでも渡して状態を取得するようにすれば都度分岐が増えることは無い。 他にもボタンが増えるということは 何かしら新しい処理が増えると言うことだから 新しく増えた側の処理に状態を持たせたりとか。 まぁ、その辺のことは前にも同じようなレスがあったと思ったけど そういうのを組み入れるのと長期的に見てそこまでのものでは無いんじゃ、と言うのが 組み入れるかどうかの判断基準になるんじゃないかな。 : デフォルトの名無しさん [] 2018/03/11(日) 20:18:26.70:lvju0XX+ 長いねん : デフォルトの名無しさん [sage] 2018/03/11(日) 20:52:08.82:eeeFjAQk ありがとうございます。 プログラムを考えるのが面白くなってきました。 : デフォルトの名無しさん [] 2018/03/11(日) 23:24:33.00:iweXkOC/ データのある最終行を取得したいのですが、 うまくうごきません。 Range("A10", Cells(Rows.Count, 1)).End(xlUp).Select A10から下に続く最後の行数(データ個数15個、空白なし)を取得したいのですが、 なぜか返ってくる数は24ではなく、 1048575です。 知識が浅く、解決できません。 どなたかご助言お願いします。 : デフォルトの名無しさん [sage] 2018/03/11(日) 23:30:27.72:XQUvZIO5 Range("A10").End(xlDown).Select : デフォルトの名無しさん [] 2018/03/11(日) 23:47:11.35:iweXkOC/ 余計なものがあったんですね。 ありがとうございます。 少し進みました。 : デフォルトの名無しさん [] 2018/03/12(月) 00:02:45.31:HsTapSs6 シート1〜10まであって、a+b=cって計算を、シート1〜7で行ってます aとbは入力シートに入力した数値で、各シートが、個別に入力シートから引っ張ってきています 各シートで同じ変数を元に同じ計算をしてるが作り方って変ですかね? なんでそんなことしてるの?というと、検討するシートを1つ作って、そのあと別検討シートを追加、という作り方をしていった結果、検討内容自体は違うものの、共通の計算があるっていう状態になっていて、特に意識したわけではないです このエクセルを整理することを考えた時、共通の計算は、別個シートを作って、そこで計算させておくべきでしょうか?? : デフォルトの名無しさん [] 2018/03/12(月) 05:43:32.66 シートが必須なの? 標準モジュールじゃあかんの? : デフォルトの名無しさん [] 2018/03/12(月) 12:42:37.39:cBxGAu9U UserFormの部品の位置を微調整するために、 ズーム表示させる方法はありませんか? (今は、Windows標準の拡大鏡を使ったりしています) : デフォルトの名無しさん [sage] 2018/03/12(月) 14:30:50.92:Bvz0V3Xa 微調整なら数値からやればいいのでは : デフォルトの名無しさん [sage] 2018/03/12(月) 17:18:50.94:UMPN+oMV スペースがあるかないかもわからん馬鹿がなぜそんなことを気にするかね : デフォルトの名無しさん [] 2018/03/12(月) 18:40:09.24:BreNV4lT あっvbaスレに間違えて書き込んでしまいました すみませんvba使いません : デフォルトの名無しさん [sage] 2018/03/13(火) 00:27:26.72:qWMLlpqF UserFormを作成中にF5押下でお試し実行ができますが、 普通にやるとモーダルになります。 F5押下でもモードレスで実行する方法ってありますか? : デフォルトの名無しさん [] 2018/03/13(火) 01:15:13.77 UserFormのShowModalプロパティをFalseにする : デフォルトの名無しさん [sage] 2018/03/13(火) 01:17:05.94:qWMLlpqF ありがとうございます。 : デフォルトの名無しさん [sage] 2018/03/13(火) 07:54:16.83:j6R4vUCh いいってことよ(´・ω・`)b : デフォルトの名無しさん [sage] 2018/03/13(火) 11:51:11.57:pjKAsbJg ここはレベル高ぇ。 でも、みんな、協力しているのはとても嬉しいです。 勉強になる。 ありがとうございます。 : デフォルトの名無しさん [sage] 2018/03/13(火) 17:49:20.30:Fj3wIRvx よろしくお願いします。年1のプレイヤーです。 商品コード(1000〜1000000)に対して、別シートにある原価を vlookupで検索し、商品コードの右セルに代入しようとしているのですが 1000番台はエラーにならず、200000台からエラーになってしまいます (1000番台の次は200000台にコードが飛びます) 「worksheetfunctionクラスのVlookupプロパティを取得できません」 なにが原因かわからなくてヘルプお願いします。 ================================================= For i = 2 To 最終行 原価 = 0 With Sheets("原価") 原価 = WorksheetFunction.VLookup(Cells(i, 商品コード列), .Range(.Cells(1, 1), .Cells(10, 1000)), 6, False) End With Next i : デフォルトの名無しさん [] 2018/03/13(火) 17:57:59.90 「vlookup vba」でggrks 検索結果の例: ttps://www.sejuku.net/blog/29654 : 381 [sage] 2018/03/13(火) 18:11:15.85:Fj3wIRvx すみません。解決しました。 : デフォルトの名無しさん [sage] 2018/03/14(水) 01:32:37.37:jWcIaZnH 済んだハナシで済みません : デフォルトの名無しさん [] 2018/03/14(水) 20:38:23.29:LX5CWuB3 IEやExcelを非アクティブのままバッチ処理してると、CPUやメモリをやたら消費するのはなんでだろ? AppActivateで対処はできてるけど、理由が分からないのが気持ち悪い (ちなみにAppActivateは自アプリを前面にできないのはなんでだろ?いちいち別のVBSを呼び出してる) Excelが「遅くなる」点については調べてる人がいて、「非アクティブでは遠慮して動くから」と CPUが櫛型に動いてる様子を紹介してた ならCPU使用率が下がるはずなのに現実は逆で、やたら使用率が上がり、メモリも何倍も上がる 遅い分イベントが貯まってスタックが貯まってメモリが上がって、そのためにCPUも上がるのかな 「遠慮する」機構が裏目に出てるのかな : デフォルトの名無しさん [sage] 2018/03/14(水) 21:36:34.44:e3akNBzY 一目で馬鹿とわかる文章 : デフォルトの名無しさん [sage] 2018/03/14(水) 21:38:17.91:QheYb9tS IE, Excel などのプロセスを終了していないとか? ドンドン起動しても終了しないから、プロセスが無限に増えていってるとか? タスクマネージャーで見れば? : デフォルトの名無しさん [sage] 2018/03/14(水) 22:18:16.08:LX5CWuB3 1プロセスの話 それに、プロセスが貯まってる話ならなんでAppActivateで解決するのん? : デフォルトの名無しさん [sage] 2018/03/14(水) 23:50:59.44:+W/Ve/Kf 馬鹿丸出し : 387 [sage] 2018/03/14(水) 23:58:49.45:QheYb9tS 例えば、コマンドプロンプトから、Ruby を起動して、そのソースコードから、 Selenium WebDriver で、ブラウザを起動すると、 これらは、GUI のプロセスだから、プロセスに親子関係がある。 (親) コマンドプロンプト → Ruby (子) → ブラウザ (孫) だから、親か子を終了すると、孫のブラウザも終了する でも、VBScript(VBS) などで、CUI モードを使うと、親子関係を断ち切るから、 (親) VBS → ブラウザ・Excel (子) VBS を終了しても、ブラウザ・Excel は終了されない。 子プロセスを、自分で管理せず、OS に任せている状態になる : 385 [sage] 2018/03/15(木) 01:02:06.87:3pohbyhz 話聞いてる? : 385 [sage] 2018/03/15(木) 01:06:52.75:3pohbyhz あ、分かった、俺が悪かった タスクスケジューラで直接エクセルを起動した場合は、この現象起きなかった気がする DOSのバッチ経由で起動すると起きる気がする で、「OSに任せる」と、非アクティブ時に無駄にCPUとメモリを食うと なるほど 留意点は分かったけど、理屈は分からんw : 387 [sage] 2018/03/15(木) 01:42:16.85:NnpmsWbw プロセスには、2種類ある ユーザーが管理している、画面を持つ(GUI)プロセスと、 OS が管理している、画面を持たない(CUI)、 バックグラウンドで動作する、サーバーのようなプロセス 上は、プロセスに親子関係があるけど、 下は、OS がプロセスの親になるとか? : デフォルトの名無しさん [sage] 2018/03/15(木) 06:34:45.23:z1/gBAj5 フォルダ内の複数のエクセルファイルを開いて指定シートをコピーして閉じるを繰り返したい。コピーするシートは各エクセルに対して1シートのみ。 シート名は個人名でそれぞれバラバラなんだけどいい方法ない? : デフォルトの名無しさん [sage] 2018/03/15(木) 06:42:29.06:VNc1eFwU 1シートしかないブックにする : デフォルトの名無しさん [] 2018/03/15(木) 07:23:11.51 人が開いたときにそのシートを特定するときはどうしてんの? それをプログラムに落とせばいい : デフォルトの名無しさん [sage] 2018/03/15(木) 08:20:13.69:Q+OFwlGZ 質問です。 whatif のデータテーブルで、sheet1にある式をsheet2から参照したいのですが、「代入セルの参照が正しくありません。」というエラーが出ます。 sheet1の同じシート内でやる時はエラーは出ないのですが、別シートは参照出来ないのでしょうか。 : デフォルトの名無しさん [] 2018/03/15(木) 08:24:47.39 VBAの質問じゃなくね? : デフォルトの名無しさん [sage] 2018/03/15(木) 12:47:59.22:kdbViSCg メゾット君いて草 : デフォルトの名無しさん [sage] 2018/03/15(木) 13:26:06.11:GiNZbVBW 馬鹿は死ねよ : デフォルトの名無しさん [sage] 2018/03/15(木) 19:29:22.65:givVJukY はい。 対象のシートをアクティブにして下さい、 : デフォルトの名無しさん [sage] 2018/03/15(木) 21:40:55.79:khWCS+hx 入力規則でセルに選択リストを作りました で、セルのプルダウンで選んだアイテムが 何行目か?っていうのを知りたいんだけれど doとかfor文でリスト先頭から一致検索するしかないのかな? 一発でアイテムのカウント何件目か取得する事って出来たりするんかなぁ? : デフォルトの名無しさん [sage] 2018/03/15(木) 22:18:17.27:obWJCYhi match関数で行けないかな? : デフォルトの名無しさん [sage] 2018/03/16(金) 07:44:18.61:D9gIY3FC なんだが、フォルダ内のエクセルをループして開いて、目的のシートのオブジェクト名を統一してファイル開いてオブジェクト名をfor eachでヒットさせて、functionでそのシートをテキストにしたいんだがどうすればいい?ループさせてヒットさせるまではできた。 結果txtファイルは同フォルダ内の1個あってそれに更新して書き込んで行きたいんだが。 誰か教えて下さい。 : デフォルトの名無しさん [] 2018/03/16(金) 08:28:41.10:qMVu/e+c 意味わからんしほぼ丸投げ感ある : デフォルトの名無しさん [sage] 2018/03/16(金) 08:55:16.84:4vfDYpgH csvにエクスポートでもすればいいよ マクロの記録でコード作れば : デフォルトの名無しさん [sage] 2018/03/16(金) 17:01:45.82:tJ/sJf9+ 全キャラエリーン化MOD希望します : デフォルトの名無しさん [sage] 2018/03/16(金) 17:02:19.93:tJ/sJf9+ 誤爆w : デフォルトの名無しさん [sage] 2018/03/16(金) 22:56:27.26:hrS8kMFb だけどネットで探しながら作ってみてできたんだけど、 一回目のエクセルブックの指定したシートをoutputでテキストファイルに書き込み。2回目以降をApend?だっけ?で続きに書き込んでいくんだけど、outputとApend の違いだけで書き込みコードが2つあるのを一つにまとめるにはどうしたら出来ますか? : デフォルトの名無しさん [sage] 2018/03/16(金) 23:04:26.61:ikUU8ykN Append でやれば ファイルがないときは勝手に作ってくれるよ : デフォルトの名無しさん [] 2018/03/17(土) 00:32:21.24 フラグ格納用の変数(初期値False)をFor文の外側で定義して 変数がFalseだったら初回用の処理をしてTrueを代入して 変数がTrueだったら2回目以降の処理をすればいい : デフォルトの名無しさん [sage] 2018/03/17(土) 06:33:04.45:n47xCJZ+ 質問です 今EXCELで対戦格闘ゲームを作っているのですが キャラクター同士の当たり判定は それぞれ攻撃用、体用と別々に持つことで 正しく動いています。 ただ攻撃が当たった時のヒットマークを表示する位置を どのように算出すれば良いかが思いつきません。 何か良い方法はないでしょうか? ちなみにキャラクターはシートのセルを方眼紙のように見立てて 横256*縦200で1セルを1ドットに見立てて行っています。 : デフォルトの名無しさん [sage] 2018/03/17(土) 07:23:19.78:n47xCJZ+ 言い忘れていましたが 当たり判定は各キャラクターの動作毎、絵柄毎に 攻撃用が1〜3個、体用が1〜5個の四角い範囲を持っていて それが重なったかどうかで判定を行なっています。 動作とは例えば小パンチとか、大パンチとかを指します。 同じ絵柄でも違う動作の場合は 違う範囲で当たり判定を行えるようにしています。 : デフォルトの名無しさん [sage] 2018/03/17(土) 07:48:47.16:71uTBaAx スレ違い ゲームデザインとかアルゴリズムの類であってVBAの質問ではないと思う : デフォルトの名無しさん [sage] 2018/03/17(土) 08:14:30.06:n47xCJZ+ 多分そう一蹴されて終わるかもとは思っていました。 興味がある方は返答頂けると有り難いです。 : デフォルトの名無しさん [] 2018/03/17(土) 08:23:52.27:0VMaqrOi 思っていた?? なら最初にそう書けよ スレ違いの上に後出しじゃんけん 一番嫌われるパターン 要約すると「死ね」 : デフォルトの名無しさん [sage] 2018/03/17(土) 09:02:41.97:8EqoOoha 生きる!!!!! (´・ω・`)b : デフォルトの名無しさん [sage] 2018/03/17(土) 09:10:30.63:71uTBaAx 「ゲームプログラミングなら俺に聞け」とか、そういうスレの方が絶対いいと思う : デフォルトの名無しさん [sage] 2018/03/17(土) 11:01:00.47:plFeqth9 ヒットマークとやらをどう表示したいのかも書いてない こんなんで回答がつくわけない 質問の体を装ったただの俺こんなの作ってるスゲーだろアピール : デフォルトの名無しさん [sage] 2018/03/17(土) 12:28:23.68:zttMJW/5 当たり判定とヒットマークの位置関係だけあらかじめ決めておいて、あとはヒットした当たり判定のセル位置のアドレスなり座標なりからオフセット参照するだけじゃん : デフォルトの名無しさん [] 2018/03/17(土) 12:53:01.02:0VMaqrOi 構うなや どうせまた後出しで「その方法も考えたんですが 〜〜が〜〜だからそれではダメなんです。」とか 慇懃無礼にマウント取ってくるから : デフォルトの名無しさん [sage] 2018/03/17(土) 13:02:49.05:JhGe8NGg マウントって簡単に言いすぎ 倫理をふりかざして人を委縮させようとする言動に限らないと 言葉の力がなくなってしまう : デフォルトの名無しさん [sage] 2018/03/17(土) 13:38:51.05:heA3uIoa 助かります。やってみます : デフォルトの名無しさん [sage] 2018/03/17(土) 14:18:21.64:7XiT0JZV もしかして当たった位置が判らないということですか? : デフォルトの名無しさん [sage] 2018/03/17(土) 15:07:46.54:JHaB3/LC へぇ、このスレでは珍しい質問だね。 あくまでひとつの方法としての提案だけど、 当たり判定が出来るということは攻撃範囲と体範囲って呼んでるけど、 それが重なったことは判定出来てるんだよね? なら重なった範囲の中心にヒットマークを出すようにすればいいと思うよ。 つまりキャラAの右下セルよりキャラBの左上セルが 左上にあって、かつ キャラAの左上セルよりキャラBの右下セルが右下にある場合、これがキャラが重なった「当たった」ことに該当するんだけど、 この状態からキャラAの右下セルからキャラBの左上セルの縦横それぞれの差分を出して それを2で割ってキャラAの右下セルの縦と横にそれぞれ足してやれば求められるはず。 後は複数判定用の範囲を持ってるというところで どの範囲を優先するかの優先順位をつけて。 頑張って下さいね。 : デフォルトの名無しさん [sage] 2018/03/17(土) 22:00:46.63:plFeqth9 自演死ね : デフォルトの名無しさん [] 2018/03/18(日) 01:02:38.92:5x2puHKk 教えてください。 別ブックを範囲(A10:B24)指定してコピーして 現在のブックA10をはじめとした範囲にペーストしたいのですが、 なぜか参照ブックをアクティブにした上で範囲指定ができません。 最初のブック・・・A.xlsm 参照ブック・・・nal.xls 参照シート:sheet10 参照ブックのデータ最終行・・・i (24が入っています) Dim i As Integer Workbooks("nal.xls").Activate i = Worksheets("sheet10").Range("A10").End(xlDown).Row Workbooks("nal.xls").Activate Worksheets("sheet10").Activate Range(Cells(10, 1), Cells(i, 2)).Select ←RangeクラスのSelectメソッドが失敗しました。 Selection.Copy どなたか助けてください。 : デフォルトの名無しさん [sage] 2018/03/18(日) 03:11:59.88:Ml7D0I3C 複数シートでゴニョゴニョする際は Worksheets("sheet10").Range(Worksheets("sheet10").Cells(10, 1), Worksheets("sheet10").Cells(i, 2)).Select と略さずに書くといいよ デバッグ中につい違うページ開いちゃうと後で泣きを見る : デフォルトの名無しさん [sage] 2018/03/18(日) 03:58:35.89:JrJJTzVM Aブックに、BブックをOpenするコードが書いてあります。 困ったことにBブックが正常に開くこともあれば、 長時間たってもビジー状態が続き開かないこともあります。 これはAブックから開くときだけでなく、Bブックのアイコンをダブルクリックしても同様です。 そんなときでも、エクセルを強制終了した後にBブックを開くとなぜか問題なく開くことも多いです。 Bブックの問題を取り除くのが正しい方法なんでしょうが、とりあえずの対策として、 wb = Workbooks.Open(strPath & "\" & "B.xslm") で、AブックがBブックをOpenした後に一定時間経過後にBブックの特定のセルの内容を読み取れなければ、 Bブックを強制的に閉じて、再度Bブックを開き直すというコードを書こうと思ったのですが、 wb = Workbooks.Open(strPath & "\" & "B.xslm") を実行すると、 Bブックが開くまでAブックのマクロが止まってしまい、Bブックのセルが読めるかどうか判定することができません。 どうしたらよいでしょうか? : デフォルトの名無しさん [sage] 2018/03/18(日) 04:24:15.80:/1Of5770 開けていないものを閉じろと言うのは無理ゲー : デフォルトの名無しさん [sage] 2018/03/18(日) 06:47:14.19:JFJ3EKTR 最初にタスクマネージャーで、 起動中のすべてのExcel を、強制終了させてから実行すれば? たぶん、起動中のExcel が、そのブックをつかんでいるのだろう : 412 [] 2018/03/18(日) 11:12:47.56:l25Pelu+ 皆さん色々返答ありがとうございます。 さんとさんの意見を 参考にさせて頂きました。 特にさんの案は取り入れてみたところ 範囲が大きいときでも小さいときでも 見た目いい位置に表示されしかも汎用的に 使えるようでありがたいです。 さんの案は乱舞系必殺技のような 受けた相手の位置を補正しながら出す技に最適のようです。 ちょっと行き詰まったところだったので 非常に助かりました。ありがとうございました。 : デフォルトの名無しさん [sage] 2018/03/18(日) 11:21:02.32:A1IN0XTG VBA初心者でこのスレをたまにチラチラ見ているものですが 「EXCELで対戦格闘ゲーム」ってものがどういうものなのか全然想像できないです (どうやったらそんなことできるの! てかどんな画面になるの!! 状態です) もしよろしければ、何か雰囲気の掴めそうな画像か もしくは、そういう人たちが作ったゲームのリンクなどを紹介していただけると嬉しいです : 427 [] 2018/03/18(日) 21:11:28.30:5x2puHKk お返事遅くなってすみません。 コード丸写しで略さずにかいたところ、うまく動きました。 エラーの前のbookとsheetをアクティブにしただけでは足りなかったようで。 勉強になりました。 ありがとうございました。 : デフォルトの名無しさん [sage] 2018/03/18(日) 21:34:46.44:utQAsfrI on : デフォルトの名無しさん [sage] 2018/03/18(日) 21:35:52.97:utQAsfrI ontimeでopenするとかは? : デフォルトの名無しさん [sage] 2018/03/19(月) 07:21:13.16:We1Ev2gv ちと古いけどこういうのがある Excel VBA アクションゲーム作成入門 Excel 2007/2003/2002 対応 ttps://book.impress.co.jp/books/2686 : デフォルトの名無しさん [sage] 2018/03/19(月) 20:14:20.80:uXl73OAC 紹介ありがとうだけど…、本だとやっぱりよく実感がつかめない… でその本のタイトルで色々ググってみたら実際にゲームをやってる動画が出てきた エクセルでスーパーマリオを作ってみた ttp://www.nico video.jp/watch/sm12052293 Excelでこんなものが作れちゃうってすごい!(というか見てもなお信じられないが) : デフォルトの名無しさん [sage] 2018/03/19(月) 20:59:21.19:Lmqu9UWt お前みたいな馬鹿には無理ってだけ dll呼び出しできるから何でもやろうと思えばできる : デフォルトの名無しさん [] 2018/03/19(月) 22:27:28.31:bkGJBs4p スーパーマリオのDLLとかあるんか? すげーなエクセルって : デフォルトの名無しさん [sage] 2018/03/19(月) 23:08:18.69:SfVA8M0M DLLは自分でいくらでも作れるし、スーパーマリオもDLL化は可能だけど普通はそんなバカなことはやらない : デフォルトの名無しさん [sage] 2018/03/20(火) 00:08:55.57:w5UAsH4d バカはお前 DLLなんていくら出来たところでゲーム作れるだけの知識がなければ何も出来ない 知ったかぶりしてないで死んどけゴミ : デフォルトの名無しさん [sage] 2018/03/20(火) 00:13:05.69:XeOK7PK4 作れる知識と作る意義を感じるかは別問題 馬鹿は死ねよ : デフォルトの名無しさん [sage] 2018/03/20(火) 01:20:07.81:NBntR4Uy はいはい、メゾット君は無視しましょうね〜 : デフォルトの名無しさん [sage] 2018/03/20(火) 06:01:07.86:w5UAsH4d メゾット野郎はいつも口先ばかりwwwwwwww 違うってんならゲーム作ってみせろ無能wwwwwwwwwww : デフォルトの名無しさん [] 2018/03/20(火) 08:02:11.84:Su8VuYEw ゲームをエクセルで作る意味って何があるの? : デフォルトの名無しさん [] 2018/03/20(火) 08:03:53.80:TJC60I00 意味は他人に教わるものじゃない 自分で見出すのだ : デフォルトの名無しさん [] 2018/03/20(火) 08:14:23.93:mdjnVZmX やろうと思えばできるって言ってもなあ やってない人が言ってもみたいな : デフォルトの名無しさん [] 2018/03/20(火) 08:32:50.91:Su8VuYEw マリオのゲームってもコントロールしてるわけじゃないでしょ? ドットに色表示してるだけじゃないの? : デフォルトの名無しさん [] 2018/03/20(火) 09:49:54.48:uUCQMwFd DLL使うんならExcelでやる意味なさそうだがな Excelのセルでドット絵を描いてVBAでアクションゲームを作るということに Excelでアクションゲームを作る意義があるんだと思うが : デフォルトの名無しさん [sage] 2018/03/20(火) 15:10:05.57:HXa9qFC5 > マリオのゲームってもコントロールしてるわけじゃないでしょ? > ドットに色表示してるだけじゃないの? 本まである()のに何言ってるんだろう… : デフォルトの名無しさん [] 2018/03/20(火) 16:00:38.63:J0Id73NT DLLしたあとインスコするんだったっけ。 : デフォルトの名無しさん [] 2018/03/20(火) 19:53:45.15:FFuoeUFR 同じフォルダに置いておけば使えるだろw : デフォルトの名無しさん [sage] 2018/03/20(火) 20:20:30.33:GZSZ4At9 ボケ殺し : デフォルトの名無しさん [] 2018/03/20(火) 22:16:37.59:BysB7y8w アスペなんやで : デフォルトの名無しさん [] 2018/03/20(火) 22:48:23.28:9kggXYDo 質問です。 任意のフォルダ(ThisBookと同じフォルダ)の中にある xlsファイルの数を取得する方法を考えています。 Dim N as Integer With CreateObject("Scripting.FileSystemObject") For Each ff In .GetFolder(ThisWorkbook.Path).Files If UCase(.GetExtensionName(ff.Path)) = "xls" Then N = N + 1 Next End With ネットで調べてみたものの、カウントがされません。 現在対象のフォルダにはxlsファイルが一つあります。 どこを修正すれば良いのでしょうか。 教えてください。 : デフォルトの名無しさん [] 2018/03/20(火) 23:07:13.92:BysB7y8w UCaseの意味をもう一度調べてみれば? : デフォルトの名無しさん [sage] 2018/03/20(火) 23:25:24.58:qVb9KqM8 Ruby なら、これだけだが puts Dir.glob('*.txt').size #=> 5 : デフォルトの名無しさん [] 2018/03/20(火) 23:29:52.36:9kggXYDo 調べました。 UCaseではなく、LCaseだったんですね。 先に進めました。 ありがとうございました。 : デフォルトの名無しさん [sage] 2018/03/21(水) 11:16:23.41:7pPMZ9pD UCase/LCase よりも StrConv(, vbUpperCase) や StrConv(, vbLowerCase) を使った方がより良いと思う。 なんとなくだが : デフォルトの名無しさん [] 2018/03/21(水) 23:19:13.74:1JiLJjJR そーゆー感性ってすごく大事 なんとなくだが : デフォルトの名無しさん [sage] 2018/03/22(木) 23:48:33.27:wY4uz5GL そいうWithの使い方は嫌い んとなくだが : デフォルトの名無しさん [sage] 2018/03/23(金) 05:10:41.67:fhxmeXqE 寧ろ、with はああいう使い方をすべきなんじゃないの。単なる記述の省略としてだけでなく。 : デフォルトの名無しさん [sage] 2018/03/23(金) 07:23:25.20:KEQJOoX5 いんや、.NetのUsingみたいに解放は確実に出来るけど ひとつのスコープにひとつしか使えないし コーディングに慣れてる人には 一瞬、どこで生成してるの?ってなるから 可読性の見地からイマイチかなと思う : デフォルトの名無しさん [sage] 2018/03/23(金) 07:26:59.80:L9ucwTOA 既におなじみの使い方だろうとしか : デフォルトの名無しさん [] 2018/03/23(金) 07:47:34.14:Kb85u4Z4 withってusingみたいに解放してくれるんだ Set使うより簡潔にできるのね : デフォルトの名無しさん [sage] 2018/03/23(金) 08:04:55.76:FQA7q+b8 > コーディングに慣れてる人には > 一瞬、どこで生成してるの?ってなるから 普通にインデントしてたらそんなことにならん > 可読性の見地からイマイチかなと思う お前だけだろ : デフォルトの名無しさん [sage] 2018/03/23(金) 08:12:14.14:3JBwFnH8 こんなもんコピペグラマーでもしょっちゅう目にしてるはず この程度でわかりにくいとか、どんだけ素人だ ただ、老眼の俺にはドットの見落とし、書き漏らしがちょっと怖い : デフォルトの名無しさん [sage] 2018/03/23(金) 12:22:12.90:5CV31jFy 自分も初めて知った。 けどネスト深くなると、破棄されたか分かりにくそうではある。 オブジェクト残ってると問題出るプログラムの場合はちょっと使うの怖いな : デフォルトの名無しさん [sage] 2018/03/23(金) 18:30:24.67:fhxmeXqE withでcloseはしないんじゃないの? あくまでusingぽくて分かりやすいというだけで。 : デフォルトの名無しさん [sage] 2018/03/23(金) 19:28:31.68:L9ucwTOA 自作クラスに Sub Class_Terminate() を定義してステップ実行してみればわかる。 End With 後にちゃんと呼び出されるから。 : デフォルトの名無しさん [] 2018/03/23(金) 20:26:02.56:qUw1cRZJ 無知なのは仕方がないとしてもEnd Withの後にClass_Terminateが呼び出されるのなら 論理的な帰結としてWithがオブジェクトの解放をしているのではないと気がついて欲しかったなあ : デフォルトの名無しさん [sage] 2018/03/23(金) 20:32:59.84:L9ucwTOA 解放、close どっち? : デフォルトの名無しさん [sage] 2018/03/23(金) 20:43:47.72:L9ucwTOA それに「無知」とは何のことかな? 非明示的にデストラクトされてもFreeはされない言語があってその事を知らない、という意味かな? だとしたら知らない : デフォルトの名無しさん [sage] 2018/03/23(金) 22:16:31.73:LTH6T9fs 同じ階層に同じようなObjectがある場合、 Withを使ってる奴だけそんな方法で解放するの? 統一性のないコーディングだなぁ : デフォルトの名無しさん [sage] 2018/03/23(金) 22:31:56.84:DV5xQmy6 解放の方法が違う程度の事を気にしてたら現場で発狂しまくりだろうなぁ : デフォルトの名無しさん [sage] 2018/03/24(土) 00:04:50.79:X8NV5dnx スタイルは大事だから気にするわな。 気にしない奴はバグ増えまくりだ。 現場が忙しくなると崩れて来る。 そして俺のバグも増えるというわけさ。 気にしない奴とは仕事したくないな。 : デフォルトの名無しさん [] 2018/03/24(土) 00:39:44.09:TyYpGZwY 解放の方法てwそんなもんないわwww : デフォルトの名無しさん [] 2018/03/24(土) 01:08:51.19:nM3MUJGs プログラマってどういう大学のでの人たちがやってるんだ? あんま高学歴のイメージ湧かないんだけど : デフォルトの名無しさん [] 2018/03/24(土) 02:40:55.22 Withをネストして内側から外側を参照するにはどうすればいいの? 最悪それ自身のオブジェクトを変数に保持できればいいけどできないよね? を例にとると(この場合ネストするメリットは何もないけど) Dim N As Integer With CreateObject("Scripting.FileSystemObject") Dim obj As Object Set obj = . With .GetFolder(ThisWorkbook.Path) For Each ff In .Files If LCase(obj.GetExtensionName(ff.Path)) = "xls" Then N = N + 1 Next End With End With とか Dim N As Integer With CreateObject("Scripting.FileSystemObject") With .GetFolder(ThisWorkbook.Path) For Each ff In .Files If LCase(..GetExtensionName(ff.Path)) = "xls" Then N = N + 1 Next End With End With とか : 470 [sage] 2018/03/24(土) 02:46:47.80:fNSyCTew スマソが、結局のコードにおいて、fileSystemObjectはEnd withのタイミングでfreeされるってことでok? で、With OpenTextFile()とした場合も同様にcloseされる理解でok? : デフォルトの名無しさん [sage] 2018/03/24(土) 02:53:52.34:fNSyCTew ヘルプにネストすんなボケカスと書いてあったような。 未確認発言失礼。MS-Officeが無いもので。 : デフォルトの名無しさん [] 2018/03/24(土) 03:02:44.42 With New ObjectX .Exec End With は、 Dim obj As ObjectX Set obj = New ObjectX obj.Exec Set obj = Nothing と同等という理解 根拠となる文献は↓の人が挙げてくれるはず : デフォルトの名無しさん [] 2018/03/24(土) 03:12:24.84:TyYpGZwY つまりNothingを代入してもオブジェクトが解放されないのと同様にEnd Withでオブジェクトは解放されない たまたまそこでオブジェクトの参照カウントが0になったから解放されただけ : デフォルトの名無しさん [sage] 2018/03/24(土) 04:09:07.06:fNSyCTew > freeされる という表現が悪かったか。 Nothing代入と等価ならそれでええです。いずれにせよその類の機能はwithに無いと思っていたので。 ありがとう。 : デフォルトの名無しさん [sage] 2018/03/24(土) 05:50:00.67:3Pb/XQ// うん?.Net系と勘違いしてない? .Net系は確かに参照しているところが無くなればガベージコレクションで解放するけど VBAや旧VBであるVB6はNothingを入れるとそのObjectそのものが解放される仕組みだと思ったけど : デフォルトの名無しさん [] 2018/03/24(土) 05:57:47.30:Ou2f/XLi 参考までに With New ObjectX .Exec End With →End Withで解放される With New ObjectY .Exec GoTo Line1 End With Line1: →解放されない(関数の最後で解放) GoTo Line2 With New ObjectZ Line2: .Exec End With →生成されない(.Execで実行時エラー) : デフォルトの名無しさん [] 2018/03/24(土) 06:08:07.14:Ou2f/XLi 仮にClass1で以下のプロパティが定義されているとすると Public Property Get Self() As Class1 Set Self = Me End Property 以下のWithで生成されたオブジェクトはEnd Withで解放されない Dim obj As Class1 With New Class1 Set obj = .Self End With : デフォルトの名無しさん [sage] 2018/03/24(土) 06:24:23.25:3Pb/XQ// 同様にNotingを入れると? : デフォルトの名無しさん [sage] 2018/03/24(土) 08:07:41.90:dVRvT3Vm そういう場合は使わなきゃいいだけ 応用力ないの? : デフォルトの名無しさん [sage] 2018/03/24(土) 08:16:33.84:wM3wzjps そういうのは応用とは言わない 一貫性が無いと言う : デフォルトの名無しさん [sage] 2018/03/24(土) 08:21:58.80:Ypx42xzO VBA Set Obj = Nothing は必要か ttp://thom.hateblo.jp/entry/2015/12/20/135035 : デフォルトの名無しさん [sage] 2018/03/24(土) 08:41:38.11:G40hdKBQ これでしょ : デフォルトの名無しさん [sage] 2018/03/24(土) 09:04:16.28:dVRvT3Vm 一貫性の話はコードの話 応用力はお前自身の話 まあそう言うことも理解できてないバカなのはわかった w : デフォルトの名無しさん [sage] 2018/03/24(土) 09:33:19.46:DtiNFwiJ 俺はオブジェクトにNothingを入れるのを諦めた プロシージャの途中で条件によりExit Subする時とかまでカバーしようとすると コードが変な方向にねじ曲がっていく : デフォルトの名無しさん [sage] 2018/03/24(土) 09:40:33.58:E2uahCPZ 悔しくて草生やした時点でお前の負け : デフォルトの名無しさん [sage] 2018/03/24(土) 10:14:46.87:maeX3hx+ Parentプロパティってのがあったような ttps://oshiete.goo.ne.jp/qa/2463803.html : デフォルトの名無しさん [] 2018/03/24(土) 10:19:01.04:Ou2f/XLi 何を勘違いしているのか知らんが、Nothingを入れても参照が残っている限り解放はされない のClass1の定義で、 Dim obj As Class1 Dim obj_ref As Class1 Set obj = New Class1 Set obj_ref = obj.Self Set obj = Nothing →「New Class1」で生成したオブジェクトは解放されない(参照が残っているから) : デフォルトの名無しさん [] 2018/03/24(土) 10:33:33.02:TyYpGZwY 未だにNothing代入の誤解が蔓延っているんだな 旧VBプログラマーの無知が作りだした因習が新参のマクロプログラマーに受け継がれるっていう もはやウイルスの如き感染力 : デフォルトの名無しさん [sage] 2018/03/24(土) 10:43:35.46:dVRvT3Vm 反論できなくて悔しいね w : デフォルトの名無しさん [sage] 2018/03/24(土) 10:50:03.59:dVRvT3Vm それはFormにあると言うだけで全てのオブジェクトにあるわけじゃない みたいにネストしてあれこれやりたいなら素直に変数にSetした方がいい : デフォルトの名無しさん [] 2018/03/24(土) 10:50:20.70:TyYpGZwY バカはしゃべるな : デフォルトの名無しさん [] 2018/03/24(土) 11:44:41.58:D3IeoiHR 「ネストしているときはWithを使えないからネストしないときもWithはやめよう」 ↑ これを「一貫性」と呼ぶのか?流石にそういう主張じゃないよな。 : デフォルトの名無しさん [] 2018/03/24(土) 11:51:46.46:Z79Bg+7E ExcelがPythonをネイティブサポートしたら世界はどう変わるか。 : デフォルトの名無しさん [sage] 2018/03/24(土) 11:55:52.55:3GLZsUhU w : デフォルトの名無しさん [] 2018/03/24(土) 12:03:27.93:nM3MUJGs 応用力とは言わないんじゃないの その場しのぎの対応は、一貫性がないんだよ : デフォルトの名無しさん [sage] 2018/03/24(土) 12:22:38.50 の汎用的な解ができたよー 【標準モジュール】 Public Function ObjectWrapper(ByRef ObjectRef As Object, Optional ByRef ParentWrapper As ObjectWrapperClass = Nothing) As ObjectWrapperClass Dim wrapper As ObjectWrapperClass Set wrapper = New ObjectWrapperClass Set wrapper.Ref = ObjectRef Set wrapper.Parent = ParentWrapper Set ObjectWrapper = wrapper End Function 【クラスモジュール : ObjectWrapperClass】 Private m_ref As Object Private m_parent As ObjectWrapperClass Public Property Set Ref(ByRef ObjectRef As Object) Set m_ref = ObjectRef End Property Public Property Get Ref() As Object Set Ref = m_ref End Property Public Property Set Parent(ByRef ObjectWrapper As ObjectWrapperClass) Set m_parent = ObjectWrapper End Property Public Property Get Parent() As ObjectWrapperClass Set Parent = m_parent End Property Public Property Get Self() As Object Set Self = Me End Property : デフォルトの名無しさん [sage] 2018/03/24(土) 12:24:31.16 の使用例 With ObjectWrapper(CreateObject("Scripting.FileSystemObject")) With ObjectWrapper(.Ref.GetFolder(ThisWorkbook.Path), .Self) For Each ff In .Ref.Files If LCase(.Parent.Ref.GetExtensionName(ff.Path)) = "xls" Then N = N + 1 Next End With End With : デフォルトの名無しさん [] 2018/03/24(土) 13:02:42.69:TyYpGZwY java臭いw : デフォルトの名無しさん [sage] 2018/03/24(土) 15:59:40.14:+7wE18C6 1点質問です。 ODBC接続するマイクロソフトクエリ(xxxx.dqy)をエクセルVBA(EXCEL2010)から起動する際、 ユーザとパスワードを自動入力してログインするマクロを作成したいのですが、 どのように記載すればいいでしょうか。詳しい方、ご教示下さい。 宜しくお願い致します。 sub mac() Workbooks.Open ("C:\TEMP\xxxx.dqy") '/// ユーザ(abc)、パスワード(p1a#s%s)自動入力 end sub : デフォルトの名無しさん [sage] 2018/03/24(土) 17:38:17.30:H6zN6TQZ どっかのサイトからポトペタして貼り付けたのが動きませんけどって 阿鼻叫喚の地獄絵図 : デフォルトの名無しさん [sage] 2018/03/24(土) 17:56:47.42:fT1SCAXE それなら今と変わらなくね? : デフォルトの名無しさん [sage] 2018/03/25(日) 00:20:48.30:F9l+1oy/ 勉強して会社エクセルに入れたいんだけどセキュリティ的にどうなのでしょうか? 管理者権限がなくてもできますか? : デフォルトの名無しさん [sage] 2018/03/25(日) 00:27:54.20:fDU87IMf セキュリティ的には完全にアウトだから入れたかったら会社の上司に相談すること : デフォルトの名無しさん [sage] 2018/03/25(日) 00:43:47.76:1gqbR9Sf 今の時代にエクセルが入ってない職場ってどういうところなんか気になるな : デフォルトの名無しさん [] 2018/03/25(日) 00:44:35.98:IZk64w7g なにを入れるんだよw : デフォルトの名無しさん [sage] 2018/03/25(日) 01:05:24.75:EWpgF6fF ヒキニートの妄想だろ : デフォルトの名無しさん [] 2018/03/25(日) 01:44:51.57:U5SlEUJl 日本は中小企業が大部分を占めるのでExcelの需要が大きいんだと思う。 : デフォルトの名無しさん [] 2018/03/25(日) 01:45:45.66:U5SlEUJl 10年以上受け継がれてる見積もりシートとかあるわ。 : デフォルトの名無しさん [sage] 2018/03/25(日) 04:17:50.28:fDU87IMf 中小企業が大部分なのはどこの国でも同じなんだが : デフォルトの名無しさん [] 2018/03/25(日) 04:57:24.72:U5SlEUJl 雇用者数に対する中小企業割合は日本では8割、アメリカ、イギリス、ドイツなどで5割程度のようだが、これおそらく生産性に直結してると思う。 資本が集中していない分、日本は競争力が低い。 一方で、中小企業割合が大きいということは、一国一城の主となれる割合が大きいことでもあり、儲からないけど好きなことで飯が食えるという意味では良いことなのかもしれない。 : デフォルトの名無しさん [] 2018/03/25(日) 05:01:26.01:U5SlEUJl ちなみに欧米でも中小企業が8割を占める国があり、イタリアがそうらしいです。 イタリアは職人的な工芸製品のイメージがあり、製品本来の価値よりブランドイメージが先行している感じがする。 そこは見習うべき点かもしれない。 同じものを売るなら高く売ったほうが良いからね。 : デフォルトの名無しさん [] 2018/03/25(日) 05:04:38.97:U5SlEUJl イタリアのExcel割合を調べてくれたまえ。 : デフォルトの名無しさん [sage] 2018/03/25(日) 21:29:27.29:jcp+Rd0d 中小とか関係無いだろ。 大企業でExcel入ってない所なんて聞いたこと無いぞ。 : デフォルトの名無しさん [sage] 2018/03/25(日) 22:39:02.13:MnBbK5My 大企業はエクセルの他にTableauとかSAPとかSalesforceみたいなの入れてたりするやん 大抵の中小にはエクセルしかない : デフォルトの名無しさん [sage] 2018/03/25(日) 23:08:52.28:jcp+Rd0d 入っててもExcel使ってるだろ。 それも、そういうのより有用にな。 お前が言ってるのはプラスアルファの部分で必須という点ではExcelの方が上だぞ。 : デフォルトの名無しさん [] 2018/03/25(日) 23:31:43.16:IZk64w7g Excelのほかにはちゃんとしたデータベースが導入されていれば 事務部門には必要にして十分だろう : デフォルトの名無しさん [] 2018/03/25(日) 23:34:10.07:U5SlEUJl Excelの最大の問題点は情報の共有。 日本の大企業がExcelに頼っているならそれが弱点かもしれない。 : デフォルトの名無しさん [sage] 2018/03/26(月) 00:27:14.12:KUO5BBWu 働いたこともないニートが妄想で語るなよ : デフォルトの名無しさん [sage] 2018/03/26(月) 11:51:23.00:I0XgyLKy 情報の共有ってことだと社内データベースが不可欠だけど素人では運用するのが難しい。 このネックはなかなか解消できないのかもね。 開発ツールとかはただでいくらでも手に入るし運用も問題にならない。 ルールで導入できないとかそういうのは自業自得だから。 : デフォルトの名無しさん [] 2018/03/26(月) 12:00:07.22 Excelの共有機能を使えば万事解決やろ : デフォルトの名無しさん [] 2018/03/26(月) 12:06:51.37:WZ1ZCWjW 無駄だろな。 俺は階層ディレクトリにも疑問を持っているのだが、おそらく理解する人は少ないだろうなあ。 一番被害を被ってるはずのウェブ屋さんが「階層ディレクトリは素晴らしい」と言い張りそうな気がする。 : デフォルトの名無しさん [] 2018/03/26(月) 12:08:37.31:WZ1ZCWjW 業務用のパッケージソフトってだいたい300万位がエントリーレベルなので、そうおいそれと買い換えられない。 ここもネックになってる。 : デフォルトの名無しさん [sage] 2018/03/26(月) 12:20:45.13:I0XgyLKy ただで手に入るSQLSever ExpressとVisual Studio Express で機能的には十分なんだけどね。 運用が難しいってだけじゃなくて、「ツールを導入するのが好きな人」の陰謀なんじゃないかと勘ぐっているw : デフォルトの名無しさん [sage] 2018/03/26(月) 13:06:59.27:6T2vyhwF 業務用ソフトってのはサポート込みなんだけど どこの企業でも運良くパソコンオタクが入社して時間を持て余してるわけじゃないんで データのバックアップから非常用の電源まで、まとめて面倒を見るのは大変だし、いちいち調べて対処するのは効率が悪い ノウハウを持った会社からパッケージで買った方がずっとコストも安いし対応も早いし安心できる : デフォルトの名無しさん [sage] 2018/03/26(月) 13:23:21.66:0ERRGh/D VBEのコードウインドウの背景色を濃いグレーに変えたのですが、プロシージャの区分線の色も濃いグレーのために背景と同化して見えなくなってしまいました プロシージャの区分線の色を変更する方法ってありませんか? : デフォルトの名無しさん [sage] 2018/03/26(月) 13:23:49.36:I0XgyLKy 業務ソフトじゃなくてツールの話をしてるんだけど? 定型業務以外の、何か調べてレポートしたりとかマーケティング向けの調査とかそういうの。 : デフォルトの名無しさん [] 2018/03/26(月) 13:29:25.15:WZ1ZCWjW 300万の製品を10年使われると年間30万、月2万5千円だろ。 だったら月2万5千円で最新バージョンが使い続けられるといいのだがな。 アップデートが途中で打ち切られるので未だにXPがあるんだよな。 XPで何でもできるならそれでもいいんだが、新しいソフトはXPサポートしないしな。 300万は微妙すぎる金額だよな。 まあ微妙だからこそ、その価格に集中するんだろうけど。 : デフォルトの名無しさん [] 2018/03/26(月) 13:31:09.84:WZ1ZCWjW 代々受け継がれてるExcelのシートも結構あって、そこで問題になってるのが情報の共有なんだよな。 : デフォルトの名無しさん [sage] 2018/03/26(月) 13:56:24.07:Fzg6eq8C 小はともかく中規模の事業所はデータの整理も進んできてる 古いデータを必要な物からデータベースに落とし込んで再利用可能にしてる それをやらないと競争に勝てないんで : デフォルトの名無しさん [sage] 2018/03/26(月) 22:38:29.48:RlMBpq5I むしろ小規模ならクラウド上に乗っけて GITとかで管理すればいいんじゃないの? : デフォルトの名無しさん [sage] 2018/03/27(火) 00:06:28.13:i+K8FLsM REST APIをコールしたいんだがVBAだとどんな選択肢がある? IEインスタンス使う方法以外で : デフォルトの名無しさん [sage] 2018/03/27(火) 07:54:36.52:/jbLr42o その辺のパッケージにマトモなBI作ってない企業は出力したデータをExcelで加工する仕事がある : デフォルトの名無しさん [sage] 2018/03/27(火) 08:48:00.11:OGHJWfFq 誰もわかんないですか? : デフォルトの名無しさん [sage] 2018/03/27(火) 09:00:02.17:Rlp7FXcd ID:OGHJWfFq の頭の中では… なぜ私が質問したのにみんなスルーしてるの! 私が質問したら答えるのが当然でしょ! 答えるのが当然なのに答えないってことは、つまり知らないって事よね!? ↓output 誰もわかんないですか? : デフォルトの名無しさん [sage] 2018/03/27(火) 09:52:14.28:se4xCVEM RESTのことを知らないのであれだけど httpリクエスト(getとかpost)する方法のこと? : デフォルトの名無しさん [sage] 2018/03/27(火) 11:09:50.91:nMHUA4Cr Application.WorksheetFunction.WebService() : デフォルトの名無しさん [sage] 2018/03/27(火) 12:10:18.56:Z1ln/9g0 いえ、わかんないの?って感じで煽ったらそれぐらい知ってるわ!ってノリで答えてくれる人が出てくるかなと思いまして : デフォルトの名無しさん [] 2018/03/27(火) 12:20:24.49:nnyxYnJQ お前ら関係ない事まで答えたがるくせにw 何変ないじり方してんだよw : デフォルトの名無しさん [sage] 2018/03/27(火) 22:07:01.34:8sNHT6Rv Dim c As Byte For c = 1 To 43 処理 Next c For c = 43 To 1 Step -1 ここでオーバーフローのエラーになります。cの中身は44でByteの範囲内です。 エラーになる原因を教えてください。 : デフォルトの名無しさん [sage] 2018/03/27(火) 22:46:58.40:N/whD29M c = -1 でもオーバーフロー Byte型にマイナスがだめ : デフォルトの名無しさん [] 2018/03/27(火) 22:48:09.36 ケチケチしないでLong使えやwwwww : デフォルトの名無しさん [sage] 2018/03/27(火) 22:48:40.35:8sNHT6Rv ありがとうございます。型かえます。 : デフォルトの名無しさん [sage] 2018/03/28(水) 03:53:43.79:Cdw31wh4 いいってことよ(´・ω・`)b : 555 [555] 2018/03/28(水) 03:54:06.82:Cdw31wh4 555げっち(´・ω・`)b : デフォルトの名無しさん [sage] 2018/03/28(水) 21:27:49.05:b61/mHBH -1でオーバーフローするってのは判る。それに今どき積極的にByte型を 使う理由もそうないだろうって事も。 だけどでオーバーフローになる理由が判らない。 ではループ終了時にも値はマイナスにはなってないよね? : デフォルトの名無しさん [sage] 2018/03/28(水) 21:33:27.08:fW+sJxWu ぐぐってみたら10年以上前からなんやねんこれってなってる ttps://www.ozgrid.com/forum/forum/help-forums/excel-general/66761-overflow-error-in-for-loop-stepping-backwards-with-byte : デフォルトの名無しさん [sage] 2018/03/28(水) 21:39:46.02:b61/mHBH ありがと。まぁループ変数にByte型を使うなって事で ┐(´д`)┌ヤレヤレ : デフォルトの名無しさん [sage] 2018/03/28(水) 21:48:47.59:c16Hwi83 For文の内部処理で-1をバイト型にキャストしようとして詰んでしまってるんじゃなかろうか : デフォルトの名無しさん [sage] 2018/03/28(水) 22:58:28.63:b61/mHBH Step -1 の-1をDim c As Byte のByte型に合わせようとしたけど、Byte型では 範囲外 オーバーフローだぞ…と なるほど : デフォルトの名無しさん [sage] 2018/03/28(水) 23:05:20.91:qqTeUvjF Variaant型変数を宣言して整数を代入した場合 Dim i i = 65535 i = i + 1 して65536にしてもオーバーフローエラーにはなりませんでした。 Variant型変数の整数の内部表現はLongが標準なんでしょうか? : デフォルトの名無しさん [sage] 2018/03/29(木) 01:39:16.45:1S4zmkyv いっぺんヘルプ読んでみ ttps://msdn.microsoft.com/ja-jp/vba/language-reference-vba/articles/variant-data-type : デフォルトの名無しさん [sage] 2018/03/29(木) 03:39:40.96:Vz9b93Ky 急にオートメーションエラーが発生するようになったんだが。。。 : 563 [sage] 2018/03/29(木) 03:47:53.56:Vz9b93Ky ググったところ 以下のリンク見て、動くようにはなったが、納得できない感じ ttps://social.msdn.microsoft.com/Forums/ja-JP/1522c74b-17e7-402d-8a87-2d1a6af1feab/excel-2016?forum=vbajp Windows Update で動かなくなるとか勘弁 : デフォルトの名無しさん [sage] 2018/03/29(木) 20:05:15.88:YuebNQaY listviewで教えてください 幅を自動調整したい時、ぐぐると「widthプロパティを-1か-2にすべし」と書いてあるのですが、 やってみると「プロパティの値が不正です」とエラーになります。 フォームエディタのプロパティ画面でwidthを直接設定しようとしたら、そもそも「0以上の値を 入力してください」と言われてしまいました。 listviewの仕様が変わるか何かあったのでしょうか。 それとも、実は同名の別のコントロールなのでしょうか。 listview事態は、ツールボックスを右クリックしてその他のコントロールから Microsoft ListView Control, version 6.0 というのを有効にしています : デフォルトの名無しさん [] 2018/03/30(金) 07:00:19.72:r/zfsTLq こんなに詳しいならVBAなんかじゃなくてドットNETに移行したら? 出来る範囲も桁違いに多いし技術的にはVBAとそんなに変わらんじゃん そう言うわけではないの? : デフォルトの名無しさん [sage] 2018/03/30(金) 07:10:50.00:MnRWcQoL > VBAなんかじゃなくてドットNETに移行したら? MSに言ってくれよ... : デフォルトの名無しさん [] 2018/03/30(金) 07:25:23.82:r/zfsTLq そうじゃなくてエクセルを使う必要なんてないんじゃないのって事です .netでもエクセル以上の事も出来るし エクセルの制約がない分簡単な気がするんだけど しかもコード的にも少ししか変わらないし : デフォルトの名無しさん [sage] 2018/03/30(金) 07:55:52.10:M36Hc3ht 処理対象がエクセルならvbaのほうが手軽 そうじゃないなら他の言語のほうがいい とか言いつつ俺はエクセル処理にpowershell使ってるけど : デフォルトの名無しさん [sage] 2018/03/30(金) 08:07:18.25:O1RjHycM 個人ならいいけど会社だとエクセル使いの方が多いから合わせないとならんしな スマートで無いやり方をしているのは思いつかないからではなく他に方法がないからなのであって、 その代替手段は「君だけが思いつける冴えたアイディア」ではないんだよ : デフォルトの名無しさん [sage] 2018/03/30(金) 08:24:56.25:MnRWcQoL > そうじゃなくてエクセルを使う必要なんてないんじゃないのって事です お前のところがそう言う環境ならそうすればいい > .netでもエクセル以上の事も出来るし Excelを越える操作性を持つアプリを開発できるの? > とか言いつつ俺はエクセル処理にpowershell使ってるけど PowerShellは癖あるけど慣れると楽だよね Windows 10 に移行して PowerShell 5.0 の class や enum が使えるようになったから嬉しい と思ってたら Excel も 2013 → 2016 になってて以前のスクリプトがエラーになる... 新年度はまずはこの修正からだな : デフォルトの名無しさん [sage] 2018/03/30(金) 08:42:59.54:+sennHug ExcelはUIとしては優れているじゃないか。 これを利用しない手はない : デフォルトの名無しさん [] 2018/03/30(金) 08:51:55.14:GVvaPPCb VisualStudioにOfficeSDKがあるからアプリとして簡単に作れると思うけど 豊富なオプジェクトツールもあるし スピード速いし制約が少なくて簡単だと思うけどね まぁ好きなの使えば良いんだけどね : デフォルトの名無しさん [sage] 2018/03/30(金) 11:47:00.45:+sennHug 簡単にっていうレベル感によると思うけど、どんなもん? : デフォルトの名無しさん [] 2018/03/30(金) 13:28:47.23:rW3gxcuW ここの質問の出来たり意味とか分かるレベルならそのまま移行出来ると思うくらい簡単 文法はほぼ一緒 エクセルの制約って結構キツくて自由がないのでやりたい事も大回りしながらになるし : デフォルトの名無しさん [sage] 2018/03/30(金) 13:37:44.27:O1RjHycM 簡単に(ただしVisual Studio使用許可を会社に貰う労力は除く) : デフォルトの名無しさん [] 2018/03/30(金) 17:44:57.97 Excelは宇宙 : デフォルトの名無しさん [sage] 2018/03/30(金) 20:29:10.14:Gon83GvH VSのライセンスを事務屋の分まで手配してくれる会社ってどんなところだろうか。 : デフォルトの名無しさん [sage] 2018/03/30(金) 20:50:22.47:MnRWcQoL VisualStudio OfficeSDKでググってもOffice Developer Tools(Visual Studio Tools for Office (VSTO))の話とかしか出てこない お前さんほんとに使ったことある? : デフォルトの名無しさん [sage] 2018/03/30(金) 21:08:20.75:PhjyEwlD >しかもコード的にも少ししか変わらないし お前VB.Net仕事で使ったことないだろ いくらなんでも舐め過ぎだ コード的にも少ししか変わらない? 本当にうわべしか見てないのによくそんなことが言えるな 文法的にほぼ同じというだけで 内容的には同じフレームワークのC#とかの方に遥かに近いわ お前、そんなこと言いながら.Net系の仕事に入ったら一発で首飛ぶぞ : デフォルトの名無しさん [sage] 2018/03/30(金) 21:18:35.20:gQAlhwsH PowerShell + Excel か〜 なんか面白そうだから勉強してみよう : デフォルトの名無しさん [sage] 2018/03/30(金) 22:28:42.55:rpshcViU なんでそんなに必死なの? : デフォルトの名無しさん [sage] 2018/03/30(金) 22:41:59.65:NsVRzYaI えっと、OpenXMLのことかな? : デフォルトの名無しさん [] 2018/03/30(金) 23:23:13.75:7HVZnQv9 教えてください。 特定のフォルダの中にxlsファイルが一つと、xlsmファイルがあります。 これはシステムの前提です。 xlsファイルが2つ以上ある場合はエラーが出るよう、以下のように作りました。 ThisPass = ThisWorkbook.Path With CreateObject("Scripting.FileSystemObject") For Each ff In .GetFolder(ThisWorkbook.Path).Files If LCase(.GetExtensionName(ff.Path)) = "xls" Then N = N + 1 Next End With If N > 1 Then MsgBox "xlsファイルが" & N & "個見つかりました。" & vbCrLf & _ "xlsファイルは1ファイルだけおいてください。" & vbCrLf & _ "プログラムを終了します。 " Application.Quit ThisWorkbook.Close SaveChanges:=False End If 質問ですが、 そのフォルダの中に一つだけあるxlsファイル名を取得するには どうしたら良いでしょうか。 "*.xls"の条件に合うファイル名を返したいです。 : デフォルトの名無しさん [sage] 2018/03/30(金) 23:26:17.70:Edi5ddFk Dir関数を使えば良いんじゃないの : デフォルトの名無しさん [sage] 2018/03/30(金) 23:29:47.99:BIk3pBCX 既にfso使ってるならそのif分の中でGetBaseNameで取得すりゃいいのでわ 酔っ払ってんのか? : デフォルトの名無しさん [] 2018/03/30(金) 23:31:17.74:7HVZnQv9 Dir(ThisWorkbook.Path & "\*.xls") のような感じでしょうか? (ThisWorkbook.Pathのところに何となく違和感がありますが。) : デフォルトの名無しさん [] 2018/03/30(金) 23:34:41.59 If 〜 Then N = N + 1 を複数行にして If 〜 Then If N = 0 Then strFirstFileName = ff.Name N = N + 1 End If にすればいい : デフォルトの名無しさん [] 2018/03/30(金) 23:46:29.02:7HVZnQv9 ("Scripting.FileSystemObject") の部分、ちゃんと理解できておりませんでした・・・。 うまく使えばGetBaseNameでファイル名が取得できるのですね。 ありがとうございました。 そのコードで今回はファイル名取得できました。 勉強始めたばっかりで、難しいですが面白いです! ありがとうございました! : デフォルトの名無しさん [sage] 2018/03/31(土) 09:26:07.32:H7P83KyH 他のテキストエディタなどで書いたコードをvbeに貼り付けるのってダメなんでしょうか? ダイアログを表示するのに文字列を直接指定している部分が引っかかっているらしくて vbeの方で同じ文字列を再度打ち直すと正常に動作してくれるのですが 原因なにかわかりませんか? : デフォルトの名無しさん [sage] 2018/03/31(土) 09:58:16.23:XNLdwQIM ユニコード : デフォルトの名無しさん [sage] 2018/03/31(土) 16:00:53.86:H7P83KyH ゴミvbにunicode非対応とかなんでこんなのが現代に君臨してんだろう ありがとうございました : デフォルトの名無しさん [sage] 2018/03/31(土) 16:31:10.15:qcKBqECv いいってことよ(´・ω・`)b : デフォルトの名無しさん [sage] 2018/04/01(日) 14:16:21.26:YzkMtc7h VBAのテキストボックスの .LineCount ってどういう時に使いますか? : デフォルトの名無しさん [sage] 2018/04/01(日) 14:19:52.40:YzkMtc7h というのも、例えばInteger型の変数iに代入しようとして、 i=テキストボックス名.LineCount ってやると、 実行時エラー '2185': LineCountプロパティの値を取得できません。このコントロールはフォーカスを持つ必要 があります。SetFocusメソッドによって、このプロパティまたはメソッドが参照されるま えにフォーカスが移動しました。 ってエラーになったもので。 : デフォルトの名無しさん [] 2018/04/01(日) 16:31:21.48:OrI5htLK さあね、SetFocusとセットで使って問題ないシーンだったら使えばいいんじゃね? なんでそういう作りになってるかはしらんけど、歴史的な理由ってやつじゃね? LineCountは全部品共通で使い回してる内部変数を参照していて フォーカスが当たってるときだけ値を保持してるとか : デフォルトの名無しさん [sage] 2018/04/02(月) 00:58:07.54:4AdYvMWY Ruby で、Selenium WebDriver で、ブラウザの自動操作をすると、 入力コントロールに入力するには、フォーカスが必要だったかな? フォーカスは、キーボードなどの入力装置を独占するから、 OS内で同時に、1つのアプリの、1つのコントロールしか持てない : デフォルトの名無しさん [] 2018/04/02(月) 12:20:32.51:7SJzoey2 それは単なるwebdriverの仕様あるいは方針にすぎん : デフォルトの名無しさん [sage] 2018/04/02(月) 13:41:52.74:zMeLik1V 誰か教えてください。いくら調べても分からなかった・・・ 近似曲線を引くマクロを書いて、ボタンに登録してるのですが、この動作を行うと 1回目の曲線が変な形で残ってしまう。 1回目の曲線を消したいのですが、どうしても消し方がわからない。 Private Sub CommandButton1_Click() Dim num As Integer num = MovingAvgUF.TextBox1.Value ActiveSheet.ChartObjects(1).Activate ActiveChart.ChartArea.Select ActiveChart.FullSeriesCollection(1).Trendlines.Add ActiveChart.FullSeriesCollection(1).Trendlines(1).Select With Selection .Type = xlMovingAvg .Period = num End With With Selection.Format.Line .ForeColor.RGB = RGB(0, 0, 0) .Weight = 1.5 End With Unload MovingAvgUF Range("A3").Select End Sub : デフォルトの名無しさん [sage] 2018/04/02(月) 16:44:10.21:Ts/JiFXW 実行のたびにAddしているので、新しく追加されているからでしょう たぶん移動平均の期間を可変にしたいのだろうから ない場合だけAdd、すでにあれば既存のパラメーターを変更するようにする あとActivateとかSelectionは無駄なのでやめる Dim num As Integer Dim graph num = MovingAvgUF.TextBox1.Value Set graph= Worksheets(1).ChartObjects(1).Chart.SeriesCollection(1) If graph.Trendlines.Count = 0 Then With graph.Trendlines.Add .Type = xlMovingAvg .Period = num .Format.Line.ForeColor.RGB = RGB(100, 0, 0) .Format.Line.Weight = 1.5 End With Else graph.Trendlines(1).Period = num End If Unload MovingAvgUF これでどうでしょう グラフ指定(Set句のところ)はそっちの環境に合わせて書き換えてね : デフォルトの名無しさん [] 2018/04/02(月) 17:15:58.69:zMeLik1V うわ出来ました。 マジでありがとうございます。 助かりました。 : デフォルトの名無しさん [sage] 2018/04/03(火) 12:12:56.67:eJeJFdNC VB6で計算ボタンをボタンを押すと各フォームのテキストボックスの値とか使っていろいろ自動で計算してフォームが勝手に閉じられるんですが、デバッグで1個ずつ追ってくと途中で止まってしまうのって仕方ないんですかね? gotfocusやらclickとかで途中で無理やりやってるとは思うですけど、通る順序を追うにはどうしたらいいですか? : デフォルトの名無しさん [sage] 2018/04/03(火) 13:11:49.11:Coyy9Cz8 VB6 : デフォルトの名無しさん [sage] 2018/04/03(火) 21:25:59.19:q0sRpwvy A1とB1は空白C1からZ1まで日付型がはいっています。 3月分の最後 20180330と2018331がないので20180328を拾いたい。 4月分の初め 20180401と20180402が無いので20180403を拾いたい。 日付型------------------------------ 空白 (A1) 空白 (B1) 20180325(C1) 20180326(D1) 20180328(E1) 20180403(F1) 20180405(G1) 20180406(H1) ・ ・ ・ 20180505 ------------------------------------------ Sub 日付 Dim 最小数 As long, 最大数 As long 最小数= WotksheetFunction.Dmin(Rnge("1:1"),range("C1"),"200180401") 最大数= WotksheetFunction.Dmin(Rnge("1:1"),range("C1"),"200180331") End Sub ---------------------------------------- これだとうまくいかない・・・・。 何か間違っているのでしょか・・・? : デフォルトの名無しさん [sage] 2018/04/03(火) 21:46:25.59:UZjK1Wan 何がしたいのか説明を読んでもコードを見てもさっぱりわからん わからんけどエスパーすると”201803”で検索して最後に見つかったセルと”201804”で検索して最初に見つかったセルでいいんじゃないの? : デフォルトの名無しさん [sage] 2018/04/04(水) 08:15:37.03:cLM6HPyb です。 説明が下手でごめんなさい。 20180401〜現在までのデータをダウンロード(システム仕様の為、細かい設定が出来ない) ■データのフォーマット■ 土日祝はデータがない。 A2とB2からA○B○まで製品番号と製品名が入っている。 ↓ 4月分、5月分、6月分、、、、、 分けるように作りたい。 ※AとBは残す 月初と月末の日付が入ってないとずれてしまう。(セル取得が出来ない。) : デフォルトの名無しさん [sage] 2018/04/04(水) 11:56:03.28:k8docH3r MID("20180325",5,2)で"03"が取り出せるから、それで判断すればいいんじゃないの。 色んな日付上の制約があるならLEFT(),MID(),RIGHT()使い分けで。 : デフォルトの名無しさん [sage] 2018/04/04(水) 12:58:19.17:ZiMW+8i0 ありがとうございます。 その方法がありましたね・・・。 勉強になります。 ------------------------------------------------------------ 関数 {=MIN(IF(20180201<=1:1,1:1,""))} {=MAX(IF(20180231>=1:1,1:1,""))} これだとうまく行きますが、VBAだとどうやって作るのかなと思っていました。 : デフォルトの名無しさん [sage] 2018/04/04(水) 13:11:13.67:A+wsnEra 素直にfor回せ : デフォルトの名無しさん [sage] 2018/04/04(水) 13:19:04.73:ZhVuw5lC その方法になりますね。 私は勉強不足ですみません。 m(_ _)m : デフォルトの名無しさん [sage] 2018/04/04(水) 13:36:26.96:p0Y8un4q 自動車業界で例えると 1、トヨタ、日産、ホンダ 2、1の下請け企業名 3、2の下請け企業名 4、3の下請け企業名 . . . としたとき、2のAの企業名を入力したらそこからの下請け企業を抽出したいんですが、その場合のエクセルのシートの作り方をどのように作れば効率がいいですか? : デフォルトの名無しさん [sage] 2018/04/04(水) 16:08:01.72:v9gnJiNk シートAAAにあるテーブル1の種目という項目のデータを ComboBox1のリストに代入するのは下記マクロでできました Private Sub UserForm_Initialize() Dim KV As Range Set KV = Sheets("AAA").Range("テーブル1[種目]") With ComboBox1 For i = 1 To KV.Rows.Count .AddItem KV(i) Next i End With End Sub さて、ここからが質問です テーブル1にフィルターをかけた後に、フィルターで残った種目という項目のデータを ComboBox1のリストに代入するのはどうしたら良いのでしょうか? よろしくお願い致します : デフォルトの名無しさん [sage] 2018/04/04(水) 16:56:39.61:JVI42cK6 伝票番号 顧客名 商品名 数量 価格 金額 というデータがあり、同じ伝票番号に3〜6行の取引データがあります (1枚の伝票に複数の商品の販売記録がある) 同じ伝票番号の行を、1行残して削除し、1伝票番号に1行というデータに作り替えたいと考えてます。 対象となる行数は50万行 今は、ある伝票番号の一番上の次の行と その伝票番号の一番下の行を範囲で削除し、 この処理を繰り返しているのですが、とても時間がかかります どういう方法なら早く処理できるでしょうか? : デフォルトの名無しさん [sage] 2018/04/04(水) 17:13:35.91:2HxBBF0q ExcelよりAccessの仕事なのでAccessがあればそちらをオススメしたい Excelでやるならワークシート関数がいいと思う データが正規形になっていればあとからいかようにでもなるので シートは1枚でもいけるんじゃないかな(たぶん) フィルター後のセルだけをとってくるメソッドがあったはず 頻繁にフィルター条件を変えるなら、最初に全部配列につっこんで あとは配列をフィルターしたほうがパフォーマンスが出せる : デフォルトの名無しさん [sage] 2018/04/04(水) 17:27:12.13:2HxBBF0q 単純に重複を削除したいだけでしょうか? ぶら下がってるデータを1つにまとめつつでしょうか? 単純に重複削除ならフィルターでできたはず もしくはRemoveDuplicatesというメソッドで つかい方はこちら ttps://msdn.microsoft.com/ja-jp/vba/excel-vba/articles/range-removeduplicates-method-excel : デフォルトの名無しさん [sage] 2018/04/04(水) 18:13:35.11:JVI42cK6 ありがとうございました!とても参考になりました! : デフォルトの名無しさん [] 2018/04/08(日) 00:48:16.79:GhjqeU3J 質問です。 Dim Wb2 As Workbook buf = Dir(ThisPass & "\" & strfirstfilename) Do While Len(buf) > 0 If LCase(buf) Like "*.xls" Then buf2 = Left(buf, InStrRev(buf, ".") - 1) End If buf = Dir() Loop Set Wb2 = Workbooks(strfirstfilename) ←”インデックスが有効範囲にありません” というエラーが発生します。 strfirstfilenameには”AAA_original-コピー.xls”が入っており、ここまではOKです。 なぜインデックスが有効範囲にないのか・・・。 どなたか教えてください。 よろしくお願いします。 : デフォルトの名無しさん [] 2018/04/08(日) 01:24:05.18:bco3gmLh ワークブックファイルを開いてないから : デフォルトの名無しさん [sage] 2018/04/08(日) 02:53:42.68:SzguuQfE ファイルシステムの場所を示す「パス」はpassじゃなくてpathだよ : デフォルトの名無しさん [sage] 2018/04/08(日) 07:04:38.01:U7ChR0a6 まとめるとこう Set Wb2 = Workbooks.Open(ThisWorkbook.Path & "\" & strfirstfilename) : デフォルトの名無しさん [] 2018/04/08(日) 11:56:26.77:GhjqeU3J 開いてなかったですね・・・。 ありがとうございます : デフォルトの名無しさん [] 2018/04/08(日) 11:57:47.06:GhjqeU3J pathですね。お恥ずかしい・・・。 ありがとうございました。 : デフォルトの名無しさん [] 2018/04/08(日) 11:59:21.51:GhjqeU3J このプログラムの直後に Workbooks.Open (ThisPath & "\" & strfirstfilename) があったので、それをsetの前に持ってきて成功しました。 ありがとうございました。 : デフォルトの名無しさん [] 2018/04/08(日) 12:36:53.53:bco3gmLh だと昔のExcelじゃ動かなかった歴史的経緯がある : デフォルトの名無しさん [sage] 2018/04/08(日) 19:54:17.74:e7Arryer ダイアログシートって使ってる人おる? ちょっと前客先で初めて見てたまげたわ : デフォルトの名無しさん [] 2018/04/09(月) 01:50:27.33:HvlaoHdk openだと開かない?って事??何故? : デフォルトの名無しさん [] 2018/04/09(月) 06:17:53.49:aBFApcbH Openで開くけど、Workbookオブジェクトは返ってこなかったから 別途Workbooks(…)で取得する必要があった : デフォルトの名無しさん [] 2018/04/09(月) 08:06:45.50:+GOKj8c/ そんな事が... だとすると、「その頃」であれば、の対策が正解だったわけだw : デフォルトの名無しさん [] 2018/04/09(月) 09:59:01.14:4rd3h0yy 質問です。 ピボットテーブルのフィルターで特定の日付を絞りこみたいのですがどうしたら良いでしょうか? マクロの記録を使用したり、「ピボットテーブル フィルター 日付」などで検索しましたが出来ませんでした。 関係があるかはわかりませんが既存の日付フィルターも選択出来ない状態になっています。 ご存知の方がいれば教えていただけないでしょうか? よろしくお願いいたします。 : デフォルトの名無しさん [sage] 2018/04/09(月) 10:59:34.52:0O8XR8PB 質問です とか 教えてで始まる質問をするのは厚かましい馬鹿ばっか : デフォルトの名無しさん [] 2018/04/09(月) 12:37:19.47:VtsYOpX+ そーいうスレなので : デフォルトの名無しさん [] 2018/04/09(月) 19:03:54.95:L4YqDawe それはもしかしてピボットテーブルを使わなくても出来る内容なんじゃないかと思えてならない : デフォルトの名無しさん [] 2018/04/09(月) 19:30:20.73:zGBk1vsP 返信ありがとうございます。 仕事で使用しているのですが別シートにデータを入力して、ピボットテーブルの行エリアに型式、列エリアに出荷日と納品先を指定していて、翌日出荷分などを抽出したい状態です。 : デフォルトの名無しさん [sage] 2018/04/09(月) 20:11:24.02:p9GpoA3a 死ねよ スレタイ読め : デフォルトの名無しさん [sage] 2018/04/09(月) 20:49:14.80:0O8XR8PB な?厚かましい馬鹿だろ? : デフォルトの名無しさん [] 2018/04/09(月) 20:53:05.38:xfuEg0jA 過疎るより良くね? 嫌ならスルーしてれば? : デフォルトの名無しさん [sage] 2018/04/09(月) 22:14:46.27:BolAIQzl デバッグ停止した時をイベントとして動く仕掛けが欲しい 画面描画更新抑止解除とか書くの面倒 : デフォルトの名無しさん [sage] 2018/04/10(火) 02:11:50.06:uEuHjy2e しょっちゅうやらかすんならIMEに単語登録しといてイミディエイトウィンドウで実行 : デフォルトの名無しさん [sage] 2018/04/10(火) 07:54:34.58:4h5TWJMH フィルターだか、スライサーだかで普通に出来なかったっけ? 出来ないならなんか設定がおかしいと思う。 まずはデータピックアップして、小規模のデータで試してみたら。 あと、スレチな上に質問レベルも低いからその程度のことはもっと自分で調べるくせをつけた方がいい。 : デフォルトの名無しさん [sage] 2018/04/10(火) 09:38:25.63:GHxbWUjO ブックやシートの構成がどうなっていて、どうしたいのかさっぱり判らんから テスト用のデータを付けたブックをうpしたほうが早い。 んで、自分は何処まで出来たのかをも付けて そしたら、それに対して少しはレスが付くかもだなw : デフォルトの名無しさん [sage] 2018/04/10(火) 09:44:16.04:HFEk8tOo 「VBA」 : デフォルトの名無しさん [sage] 2018/04/10(火) 09:46:10.36:3MvS74tV 答えたくないなら黙ってればいいだけ : デフォルトの名無しさん [sage] 2018/04/10(火) 15:14:24.81:M/3om7RN 姉VBAのリリースはよ(´・ω・`)b : デフォルトの名無しさん [] 2018/04/10(火) 18:59:46.71:nvaLZrjf ここで聞くこともネットで調べる事の一つ : デフォルトの名無しさん [sage] 2018/04/10(火) 19:03:28.83:v03YChI+ 自分がログインした環境で開く全てのブックに右クリックメニューを追加する方法教えて : デフォルトの名無しさん [] 2018/04/10(火) 19:11:15.95:IhLaWa2X googleはエスパーしてくれないからな。ここなら大体何をやりたいか汲んで答えてくれるだろうと。 オレなら、まずジュンク堂に行ってエクセル関連本を片っ端から立ち読みして自分の欲しているモノが書いてある 本を買うね。その結果、「なんだ、簡単じゃねえか本買って損した」となったとしてもそれが血になり肉となるって事だよな。 : デフォルトの名無しさん [] 2018/04/10(火) 19:31:57.73:xK9q0OHZ バカだからエクセル本を読むのかエクセル本を読んだからバカになったのか それが問題だ : デフォルトの名無しさん [] 2018/04/10(火) 20:18:58.96:IhLaWa2X 字を読めない、本買う金がないトンスルジジイは書き込まないでww トンスルランドへ帰ってウンコ酒醸造に勤しんでくれやキム : デフォルトの名無しさん [] 2018/04/10(火) 20:51:24.91:BQLlMX/b その知識を惜しげもなく教えてあげるのもVBAの裾野を拡げる事になりみんなが感謝する ありがとう : デフォルトの名無しさん [sage] 2018/04/10(火) 20:57:33.15:HFEk8tOo そもそもVBAの質問じゃないし VBAの意味すらわからん馬鹿か、無視して書き込んでくる奴なんだろ : デフォルトの名無しさん [] 2018/04/10(火) 22:56:03.73:xK9q0OHZ 今回は「バカだからエクセル本を読んだ」が正解の模様 : ↑ [] 2018/04/11(水) 03:04:58.26:VWbEhKN2 貧乏バカチョンキムジジイ : デフォルトの名無しさん [] 2018/04/11(水) 07:57:48.69:Mg2+VUZu ところで、VBAのPython対応っていつからの話なの? : デフォルトの名無しさん [] 2018/04/11(水) 08:03:17.65 2045年から : デフォルトの名無しさん [sage] 2018/04/11(水) 08:07:42.93:xXxwVMfw 機械学習でpython3やりまくってるワシは生き残れるのかのう? ちなみに丙午です : デフォルトの名無しさん [sage] 2018/04/11(水) 18:17:41.89:e7qNRsJ3 アドインとCustomUI勉強してみな : デフォルトの名無しさん [sage] 2018/04/12(木) 01:31:14.47:fKA+nAAm 最近VBAを触り始めて、言語と言われてる理由がなんとなく分かったんだけど これを習っていった時に、せけんて"難しい"と言われるのはどういう部分になるんだろう? 作業を : デフォルトの名無しさん [sage] 2018/04/12(木) 01:32:05.63:fKA+nAAm うーん、途中送信しちゃった 出直してきます おやすみなさい : デフォルトの名無しさん [sage] 2018/04/12(木) 01:34:09.14:QnlWRFoV 知恵遅れ馬鹿の日記帳かよ : デフォルトの名無しさん [sage] 2018/04/12(木) 03:57:20.29:LcBy+9MJ プログラミングが初めてなら、何もかも難しいと感じるだろうし、 他のプログラミング言語が1つだけ使える人にとっては、その言語とVBAの文法などの違いにいちいち驚く 複数の言語が使える人なら、Excel固有のオブジェクト階層あたりを面倒と感じるんじゃないかな : デフォルトの名無しさん [] 2018/04/12(木) 05:30:51.69:JtsPqpHF 自己紹介ですかBasic爺WW : デフォルトの名無しさん [sage] 2018/04/12(木) 07:02:33.85:UMpPjY/U 例えば一つのテキストファイルを扱う時のパス?アドレス?ってどうやって扱ってます? 2つ以上のモジュールで使う場合ってやっぱグローバル? : デフォルトの名無しさん [] 2018/04/12(木) 07:07:34.20 一回の実行で処理するなら関数の引数で受け渡し 複数回実行するなら非揮発領域(隠しシートやレジストリ等)で受け渡し : デフォルトの名無しさん [sage] 2018/04/12(木) 08:50:34.23:DGaLRDsY ユーザー定義型(構造体)作る そのメンバー変数にファイル名用を定義 ユーザー定義型のインスタンス作ってモジュールにはそのリファレンスを渡す グローバル変数は極力使わない : デフォルトの名無しさん [sage] 2018/04/12(木) 11:40:14.81:LcBy+9MJ 処理内容による 別モジュールをCallで呼ぶなら引数で渡す : デフォルトの名無しさん [sage] 2018/04/12(木) 13:54:18.13:MHmA0cf+ そのユーザー定義型のインスタンスはどこにどういう形で保持しておくの? 複数回使うという話だったから。 : デフォルトの名無しさん [] 2018/04/12(木) 20:17:01.21:CCj06eku 質問です。 条件付き書式でやろうと思ってましたが、データが10,000行になったため、VBAを使いたいと思います。 例えば、 データ範囲をRange("A1:Z100")として、 A1に入力された数値が1だったらA1からZ1を赤色にする、 A1に入力された数値が2だったら黄色、 A1に入力された数値が3だったら青色、という風にするにはどうしたらよいでしょうか? A列に入力される文字は1〜8の数値のみです。 コマンドボタンを押したときに一気に処理をしたいのですが、 A1が1ならA1からZ1の色を変える、というのがわかりません。 どなたかご教授いただけないでしょうか。 よろしくお願いします。 : デフォルトの名無しさん [sage] 2018/04/12(木) 20:26:52.62:ueTcTtIU 全くわからないから全部教えろってこと? : デフォルトの名無しさん [] 2018/04/12(木) 20:34:28.91:CCj06eku i = Ws2.Range("A10").End(xlDown).Row With Worksheets("Sheet1").Range(Cells(9, 1), Cells(i, 28)) Selection.FormatConditions.Add Type:=xlExpression, Formula1:="=$A9=1" Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority With Selection.FormatConditions(1).Interior .PatternColorIndex = xlAutomatic .TintAndShade = 0.399945066682943 .Color = 13408767 End With という条件付き書式のコードを考えましたが、これ以外の方法をさがしています。 A1が1ならA1からZ1の色を変える、というのが本当にわからないので、 ヒントだけでもいただけないかと・・・。 : デフォルトの名無しさん [] 2018/04/12(木) 21:15:46.98:JtsPqpHF よく、ネットや書籍で「マクロの記録で生成されたコードを基にほにゃららしよう」ってな記事を見かけるけど、 あんまり良くない方法な気がする。最初は退屈でも我慢してマトモな入門書を見ながら基礎をやった方がいい。 : デフォルトの名無しさん [] 2018/04/12(木) 21:19:08.35:c/dN7gKJ 10万件以上のデータ処理にはアクセスを推奨 それぞれに得意分野があるのだから使い分けなさい エクセルVBAがらアクセスデータを引っ張る でデータをエクセル側で計算なり加工なり表なりをやるのが良い : デフォルトの名無しさん [] 2018/04/12(木) 21:36:24.97:CCj06eku ありがとうございます。 基礎知識がないのにネットで見つけた色んなコードをつなぎ合わせて作っていたので 無理がきました。 ありがとうございます。 今回扱うデータは最大1万件くらいでしたので、エクセルでも出来るかと・・・。 あとアクセスがないパソコンで使用することがあるので、 多少遅いのを覚悟でエクセルで作成していました。 ありがとうございました。 勉強します。 : デフォルトの名無しさん [sage] 2018/04/12(木) 21:36:49.41:ueTcTtIU まずはプログラムの基礎から始めないとダメだろうな。 forを使って自分で考えてご覧。 : デフォルトの名無しさん [] 2018/04/12(木) 23:53:14.20:J/s3hdBh ごらん。てwww ソープのキモ客かよwwww : デフォルトの名無しさん [sage] 2018/04/13(金) 00:00:04.74:5acpPh4/ メゾット君はソープとか行く上に嬢に対して「考えてごらん」とかリアルに言い出すのか。それはキモいな。 : デフォルトの名無しさん [] 2018/04/13(金) 00:08:44.43:HKlJ1iBx ←ごらんて言った覚えがあるソープ通www : デフォルトの名無しさん [sage] 2018/04/13(金) 01:03:21.93:qS+KnG2r 風俗でなければ女性に相手してもらえないキモデブか : デフォルトの名無しさん [] 2018/04/13(金) 01:12:37.40:yZAZeFsH ごらんと言われたからというわけではないですが、作ってみました。 Dim iro As Long Workbooks("test.xlsm").Worksheets("sheet1").Activate For iro = 10 To i If Cells(iro, 1) = 1 Then Range(Cells(iro, 1), Cells(iro, 28)).Interior.ColorIndex = 33 ElseIf Cells(iro, 1) = 2 Then Range(Cells(iro, 1), Cells(iro, 28)).Interior.ColorIndex = 34 ElseIf Cells(iro, 1) = 3 Then Range(Cells(iro, 1), Cells(iro, 28)).Interior.ColorIndex = 35 ElseIf Cells(iro, 1) = 4 Then Range(Cells(iro, 1), Cells(iro, 28)).Interior.ColorIndex = 36 ElseIf Cells(iro, 1) = 5 Then Range(Cells(iro, 1), Cells(iro, 28)).Interior.ColorIndex = 37 ElseIf Cells(iro, 1) = 6 Then Range(Cells(iro, 1), Cells(iro, 28)).Interior.ColorIndex = 38 ElseIf Cells(iro, 1) = 7 Then Range(Cells(iro, 1), Cells(iro, 28)).Interior.ColorIndex = 39 ElseIf Cells(iro, 1) = 8 Then Range(Cells(iro, 1), Cells(iro, 28)).Interior.ColorIndex = 40 End If Next iro なんだか長いコードになってしまいました・・・。 すっきり出来ると良いのですけど、今はこれが限界。 ありがとうございました。 : デフォルトの名無しさん [sage] 2018/04/13(金) 02:00:10.76:0w2hy+Vf メインモジュールとして起床した場所に保持すればいいよ シートイベントにそれを渡したい場合もインスタンスを参照させればいい : デフォルトの名無しさん [] 2018/04/13(金) 06:43:49.41:YdugUaFV ごらんってソープ用語なの? : デフォルトの名無しさん [sage] 2018/04/13(金) 07:43:37.15:bN+8cQpR $('tr:first > td').css('background-color','orange'); JavaScript のjQuery なら、これで、 表の1行目(tr)のすべての列(td)の、背景色を変更できる : デフォルトの名無しさん [sage] 2018/04/13(金) 09:50:34.75:qS+KnG2r で?馬鹿は黙っていればいいのに : デフォルトの名無しさん [sage] 2018/04/13(金) 11:21:39.81:/3lEd5QR それだとが言う「グローバル変数を極力使うな」が満たせないので困る : デフォルトの名無しさん [] 2018/04/13(金) 11:53:44.26 VBAなんてテクニックに凝らなくていいよ 他人の書いた「俺頭いいwww」っていうVBAを読み解くぐらいなら、長々とベタに書いてあった方がマシ : デフォルトの名無しさん [] 2018/04/13(金) 12:01:28.69:rA4jw6Vb 本当に初心者で困ってます。 画像みたいなマクロを組みたんですが、どなたかご教授お願い致します。 ttps://dotup.org/uploda/dotup.org1508286.png : デフォルトの名無しさん [sage] 2018/04/13(金) 12:06:28.55:/4JAUyBc メインモジュールのローカル変数としてユーザー定義型のインスタンスを作って関数へ参照渡しするんだけど シートモジュールからの参照はできないかな?(やったことないので何も言えない) ユーザーフォームに参照させる方法はインスタンス作ってそのメンバー変数に参照を渡すように作れば良い : デフォルトの名無しさん [sage] 2018/04/13(金) 12:08:15.06:/4JAUyBc 抜け訂正 ユーザーフォームに参照させる方法はユーザーフォームのインスタンスを動的に作ってそのメンバー変数に参照を渡すように作れば良い : デフォルトの名無しさん [sage] 2018/04/13(金) 12:14:57.86:aDeKUDTr いろんなとこから参照できるからグローバル変数と言うのであって、そういうものは極力作らない、が原則なんだよね それともシートモジュールのローカル変数はグローバル変数と呼ばないって理屈? : デフォルトの名無しさん [sage] 2018/04/13(金) 12:17:07.86:aDeKUDTr おっと × シートモジュールの ○ モジュールの : デフォルトの名無しさん [] 2018/04/13(金) 12:28:49.89:hu4msYuE その原則はグローバル変数しかない時代を経験してきたジジイ達の遺物なんやけどな 今どき無理してグローバル変数を禁止する必要はない : デフォルトの名無しさん [sage] 2018/04/13(金) 13:08:18.95:aDeKUDTr そんなことないだろう 並列化が進んでますます大事になってるような気がするんだが : デフォルトの名無しさん [sage] 2018/04/13(金) 14:34:26.06:uRBQbu6P .xlsxでVBAを使う方法を教えろ。 仕方なくワークシート関数で書いたら長過ぎると文句を言われる。ゲイツ氏ね。 : デフォルトの名無しさん [sage] 2018/04/13(金) 15:29:36.69:aDeKUDTr ゲイツ言う時点で老害 : デフォルトの名無しさん [] 2018/04/13(金) 17:03:22.93:YdugUaFV Windowsを作ったビルゲイツは人類史上最大の貢献者なのは間違いない 貴方も恩恵を受けている : デフォルトの名無しさん [sage] 2018/04/13(金) 17:58:16.00:pWhW0uY9 関数じゃダメなのか? : デフォルトの名無しさん [sage] 2018/04/13(金) 18:18:59.86:FrFNJPuN 一発やらせて Sub Macro1() Application.Calculation = xlManual For r = 1 To Cells(Rows.Count, "D").End(xlUp).Row + 1 If Val(Cells(r, "B")) > 0 And Val(Cells(r, "C")) > 0 Then Cells(r, "E") = "=B" & r & "*C" & r ElseIf InStr(Cells(r, "D"), "合計") > 0 Then Cells(r, "E") = "=SUM(E" & r1 & ",E" & r - 1 & ")" Else r1 = r + 1 End If Next Application.Calculation = xlAutomatic End Sub : デフォルトの名無しさん [] 2018/04/13(金) 18:59:42.30:HKlJ1iBx 気がする程度しか言えん程無知やからそもそもそれが老害の悪習か真に価値のある原則なのか理解しとらんやろ? お前がそうしたい時はいつでもグローバル変数使ってええんやでw : デフォルトの名無しさん [] 2018/04/13(金) 20:24:06.11 それこそみたいなのはわざわざマクロなんか組まんでも数式で十分なんだけどな : デフォルトの名無しさん [sage] 2018/04/13(金) 20:34:24.79:UkpF6ptq たくさんあっていちいち数式設定するのが面倒〜! とかじゃね : デフォルトの名無しさん [sage] 2018/04/13(金) 21:31:25.90:aDeKUDTr 「気がする」以上のことはなかなか言えんな 素人だしな : デフォルトの名無しさん [] 2018/04/13(金) 21:41:28.09:N9BUaB8U 皆さんに質問です シートの標準機能や関数で出来ることでもわざわざVBAで作りますよね? その方が仕事してる感じするし プログラムやってる感でますもんね 違いますか? : デフォルトの名無しさん [sage] 2018/04/13(金) 21:45:30.15:f6NgT/p9 同じ数式で参照するセルを2箇所ずつ変えるだけ、みたいな単純な繰り返し作業だと、むしろミスを防ぐためにVBAを使ったりするけど : デフォルトの名無しさん [sage] 2018/04/13(金) 22:11:00.99:BN8hJaEi 違います。 他の人が使えないのでなるべく関数で処理、VBAはコピーとか貼り付けとか二つ以上のファイルでやり取りするとか関数では実装できないことに限定してます。 : デフォルトの名無しさん [] 2018/04/13(金) 22:34:56.44:N9BUaB8U VBAでユーザーフォーム作ってとかしてるんでしょ? で、それに入力させてるんでしょ? : デフォルトの名無しさん [sage] 2018/04/13(金) 22:36:59.11:0w2hy+Vf シートに関数埋め込みたくない場合はvba使うかな? : デフォルトの名無しさん [sage] 2018/04/13(金) 22:38:17.37:c1bJKvGv office作ってる連中がプログラム自体仕込むの嫌だからほったらかしってマジなの? 今更vbなんて学習する価値すらねえし本気で時間と労力の無駄なんだけど jsとかpythonくらい対応する気ねえのかよこのうんこ : デフォルトの名無しさん [] 2018/04/13(金) 22:38:40.28:N9BUaB8U ユーザーフォームできちんと作り込めば簡単になって便利なんだし : デフォルトの名無しさん [sage] 2018/04/13(金) 22:43:23.72:kFKp+Je2 COM経由で好きな言語で使えばいいじゃん : デフォルトの名無しさん [sage] 2018/04/13(金) 22:59:23.05:6a6EX6Xk COMぁちゃうなー : デフォルトの名無しさん [sage] 2018/04/14(土) 08:38:50.16:sPXNQYEL 凡人が作るエクセルファイルはデータとロジックとプレゼンテーションが一つのシートに一体化してるから気持ち悪いんだよね プログラミングを学習するとだんだんシートからプレゼンテーションが減って、単純なテーブルだけのシートになる そのテーブルからも次第に関数や重複列、繰り返し項目、殆ど空欄の列が取り除かれてテーブルが正規化される 最終的にユーザーIO専用のシートあるいはフォーム、ロジックを置くVBA、それとデータ専用シートに綺麗に分かれてしまう ここまでくるともはやエクセル、エクセルVBAにこだわる理由は無くなる C#やPowerShellと手頃なローカルDBでサクッと作ってしまう方が簡単で高品質 : デフォルトの名無しさん [sage] 2018/04/14(土) 08:53:16.70:cUogvDbv なんで仕事した事無いのに仕事を語りたがるのか これが分からない : デフォルトの名無しさん [sage] 2018/04/14(土) 12:29:30.86:cGW/rI9o 手段と目的が区別できない人多いな : デフォルトの名無しさん [sage] 2018/04/14(土) 13:03:47.82:sPXNQYEL 区別できないから何にでもエクセルVBAを使うんだろうね ここぞという時に使うならいいけどね いろんな選択肢がある中でエクセルVBAがベストってパターン殆どないんだよな : デフォルトの名無しさん [] 2018/04/14(土) 13:09:38.72:fnrer+0Y > ここまでくるともはやエクセル、エクセルVBAにこだわる理由は無くなる 基本的にお前みたいな勘違いしてる奴の方が圧倒的少数派だからなw エクセルがお手軽統合開発環境だと思ってるやつw 大多数の普通の人はvbaはあくまでアプリを拡張するためのマクロ言語だと心得ているからw : デフォルトの名無しさん [sage] 2018/04/14(土) 13:48:42.38:sPXNQYEL ちょっとしたマクロもPowerShellでいいじゃん 楽だよ : デフォルトの名無しさん [] 2018/04/14(土) 13:59:47.32:fnrer+0Y いいわけないだろw だからそもそもマクロの目的を勘違いしとんねんお前w : デフォルトの名無しさん [sage] 2018/04/14(土) 14:11:33.66:sPXNQYEL じゃあ君が言う目的ってなんだい? : デフォルトの名無しさん [] 2018/04/14(土) 14:15:50.81:fnrer+0Y なんでも答えだけ聞こうとするからそんなマヌケな勘違いばかりするんだよ 何のためにアプリにマクロ言語が搭載されているか少しはその寝惚けた頭で考えてみろよトンマw : デフォルトの名無しさん [sage] 2018/04/14(土) 14:19:48.01:sPXNQYEL へえ 答えられないんだ : デフォルトの名無しさん [sage] 2018/04/14(土) 14:48:55.19:cUogvDbv VBAがベストチョイスではない(統合環境の構築申請や見慣れた拡張子以外に対する拒絶反応を是正する労力は含めない場合) : デフォルトの名無しさん [sage] 2018/04/14(土) 15:17:19.70:rbNw7OQO そうそう 新人さんに教えるならVBAは避けた方が良いね : デフォルトの名無しさん [sage] 2018/04/14(土) 19:00:29.99:5nkgm3TY に > アプリを拡張するため と書いてあるじゃん。アタマワル。 : デフォルトの名無しさん [sage] 2018/04/14(土) 19:20:48.08:sPXNQYEL ならPowerShellでいいじゃん アホなん? : デフォルトの名無しさん [] 2018/04/14(土) 19:46:40.37:3VqakJAw エクセルファイルならVBAで良いじゃん : デフォルトの名無しさん [] 2018/04/14(土) 20:13:55.28:xcHHAJfd じゃ、お前、SQLの機能を拡張するのにもPowerShellを使うのか? : デフォルトの名無しさん [sage] 2018/04/14(土) 20:21:19.54:htouokVR SQLの機能を拡張??? : デフォルトの名無しさん [sage] 2018/04/14(土) 20:32:43.51:cXQvPX0m 【アニメーター無念の死】 『枝野氏を信頼』『福島の桃食す』『急に鼻血』『胃液が逆流』『歯欠けた』 ttp://rosie.5ch.net/test/read.cgi/liveplus/1523670536/l50 : デフォルトの名無しさん [sage] 2018/04/14(土) 20:58:15.14:cGW/rI9o 手段と目的が区別できない人は、そもそも目的が理解できないのか 目的のための最適な手段が判断できないのか まあ、その両方なんだろうなぁ : デフォルトの名無しさん [sage] 2018/04/14(土) 21:04:24.62:sPXNQYEL すまんそのジョークの面白さがわからんから説明してみて : デフォルトの名無しさん [sage] 2018/04/14(土) 21:54:59.19:5hamrQWk SQLの編集こそExcel大活躍ですよ : デフォルトの名無しさん [sage] 2018/04/14(土) 22:23:47.37:5nkgm3TY あんたの満足など知らんがな。 の言う目的を訊いたんだろ。アタマワル。 : デフォルトの名無しさん [sage] 2018/04/15(日) 00:17:22.91:mNVYhnWU SQLの編集? 馬鹿は用語をちゃんと使えんのか? : デフォルトの名無しさん [sage] 2018/04/15(日) 00:18:54.06:pW3Ux/Zr 醜いアスペの煽り合い : デフォルトの名無しさん [] 2018/04/15(日) 01:59:24.88:uLe7g39K しょーもな : デフォルトの名無しさん [sage] 2018/04/15(日) 04:06:35.37:ZGDRPa/t すまん、スレチなんだろうがの言うことは結構わかる シート上のデータを元にinsert文こしらえたりselect文こしらえたりすんだよな : デフォルトの名無しさん [sage] 2018/04/15(日) 04:55:47.37:mNVYhnWU 馬鹿はそういう使い方かよ 例えばOracleならSQL*Plus、SQLServerならSSMSを使えよ。 で、EXCELでSQLの編集って何だ?用語一つまともに使えんのか? : デフォルトの名無しさん [] 2018/04/15(日) 05:40:24.25:3gCJYAlM Basic老人ウゼェ : デフォルトの名無しさん [sage] 2018/04/15(日) 06:03:18.76:/DCk6ETQ 実務経験してないと特殊な言い回しが伝わらないあるある : デフォルトの名無しさん [sage] 2018/04/15(日) 07:20:17.87:Arm7XjQb 外部データ接続でDBからデータ取り込むとき SQL編集するよ : デフォルトの名無しさん [sage] 2018/04/15(日) 09:08:17.32:Pzh/Cu9E 画像ファイルの取扱について教えてください 特定のフォルダに有る画像ファイル(jpg)を貼り付けるマクロを組もうとしています 貼り付け先のシートは複数あるので、ディスクアクセスを1回で済ませるために、 画像データを一旦メモリに読み込んだあとシートに貼り付けたいと考えています ですが、画像の取扱については Pictures.Insert や Shapes.AddPicture のいずれも ファイル名を指定するようになっており、画像データ(オブジェクト)を貼り付けるようには なっていないようです 諦めて、必要回数分ディスクから読むしかないのでしょうか : デフォルトの名無しさん [] 2018/04/15(日) 10:25:19.60:LyYRjAz1 ←こいつはなかなかの馬鹿 : デフォルトの名無しさん [sage] 2018/04/15(日) 10:30:28.81:koN3j5aX すまんSQL編集とエクセルの結びつきがわからん : デフォルトの名無しさん [sage] 2018/04/15(日) 10:31:31.23:koN3j5aX エクセルに使いやすいクエリエディタが付属してるってこと? : デフォルトの名無しさん [sage] 2018/04/15(日) 10:35:21.86:/DCk6ETQ エクセル上で完成予想図を手作りしてからSQL文考えるって事じゃないの : デフォルトの名無しさん [sage] 2018/04/15(日) 10:44:40.64:VXOW+WoG PC の物理メモリが大きくて、それらの処理が連続で実行されていれば、 たぶん、その画像ファイルはメモリキャッシュ内にあるから、 ファイルから読み込まない : デフォルトの名無しさん [sage] 2018/04/15(日) 12:34:58.71:mNVYhnWU SQL文を編集 SQLデータを編集 SQL設定を編集 これはあるけど、 SQLを編集なんて書く奴は必ず現場でおかしなことをしでかす馬鹿 : デフォルトの名無しさん [] 2018/04/15(日) 12:40:17.64:WGwd/sOZ よくいるよな、こういう些末な指摘をしてレビュー時間を食いつぶすおっさん そのおっさんからしたら「将来のことを思って教育してやってる」つもりかもしれないが この場で本当にその使い分けが必要なのかTPOをわきまえろよ : デフォルトの名無しさん [sage] 2018/04/15(日) 12:43:18.98:/DCk6ETQ だから君はまず現場経験してからそういう事言いなさい : デフォルトの名無しさん [sage] 2018/04/15(日) 13:09:58.84:XQ/rpiYn 寝る前にその文言に食いついて、起きてからも同じ事に噛みついてると考えるとちょっと面白い : デフォルトの名無しさん [sage] 2018/04/15(日) 13:16:36.47:koN3j5aX 待ってくれ 些細な言葉使いはいいんだよ 俺が知りたいのはSQL編集とエクセルの関係性の事なんだ エクセルにそんな機能あったっけ? : デフォルトの名無しさん [] 2018/04/15(日) 13:32:19.58:LyYRjAz1 知らんなら知らんでええやろw 知らん事を知れたんやから素直に教えを請えばええやんけw ホンマにバカやなコイツらw : デフォルトの名無しさん [sage] 2018/04/15(日) 14:19:35.08:Qk5xqw9Q SQL(Structured Query Language)の編集は、言葉として理解できる。寧ろ > SQLデータ > SQL設定 が分からん。 : 740 [sage] 2018/04/15(日) 14:54:13.60:Pzh/Cu9E なるほど 今回の用途だと多分それで足りますが、メモリに溜め込んだイメージを貼り付ける方法は わかりませんか? : デフォルトの名無しさん [sage] 2018/04/15(日) 15:01:27.90:MGyIE80t Excelの話じゃ無いだろ。 何でもPowerShellで良いという主張に反論してるんじゃないの? まっ、俺はPowerShellの方が苦行だからOffice関連ならVBAにするけどな。 Office関係無い場合はPowerShellにすることもあるけどな。 けどPowerShellはそんなに慣れてないから別の選択肢にするかもね。 : デフォルトの名無しさん [] 2018/04/15(日) 15:24:12.18:WGwd/sOZ 無理っぽいね Shapes.AddPictureで追加したShapeオブジェクトを.Copyすればいいけど クリップボードが汚染されるから俺はやりたくない : デフォルトの名無しさん [sage] 2018/04/15(日) 15:30:59.97:MGyIE80t そういう方法を知識として知っていたわけじゃ無いけど、多分出来るとは思う。 でもVBAでは結構高度になると思う。 もしあなたがそれを扱えるほどのスキルがあるなら既に気付いてるとも思うんだよな。 それに俺のレベルではそういうやり方のメリットも分からん。 取りあえずGDI系のCreateCompatibleDCと Bitblt系API使うのが平気ならメモリDCに溜め込んで、OleCreatePictureInDirect使ってPictureオブジェクトに変換するなんてやり方か、GDIPlus系APIを使用する方向が思いつくけど。 : デフォルトの名無しさん [] 2018/04/15(日) 15:32:50.62:K3iBQQ6B VBAでメインメモリにアクセスなんて出来るの? : デフォルトの名無しさん [sage] 2018/04/15(日) 15:36:55.89:/DCk6ETQ 出来るかどうかという話ならWinAPIを扱えばいいだけだから出来る でも出来るかどうかという質問でWinAPIを含めて答えるのは不適当な気はする WinAPI扱えるならそもそも質問しないだろうし : デフォルトの名無しさん [sage] 2018/04/15(日) 15:39:24.48:CIuag2/D メインメモリーのアクセスって言うのがなにを意味してるのかわからんけど辺りの話ならWin32API呼び出しでできる : デフォルトの名無しさん [] 2018/04/15(日) 15:46:04.12:WGwd/sOZ 「できますん」が正しい回答か : デフォルトの名無しさん [sage] 2018/04/15(日) 16:28:15.05:Pzh/Cu9E 了解しました、よくわかりました 簡単にできる方法があってそれを知らないだけだろうと思っていたので、 簡単にできる方法はない、であればそれで満足です : デフォルトの名無しさん [sage] 2018/04/15(日) 16:42:54.85:Evm/8r2L 画像をシートに貼り付けるだけなんだから普通にファイル名指定すりゃいいだろと思うのだが ディスクアクセスもOSキャッシュに乗るんだから連続でやれば1回読んだだけで終わる : デフォルトの名無しさん [] 2018/04/15(日) 18:03:51.72:WGwd/sOZ VBAに限った話でもなく、よくいるんだよ どこに時間かかってるのか計測もせずに やれ最適化レベルを上げようとかインライン化しようとか スレッド数減らそうとか根拠もなくトライして 時間を浪費するプログラマーがな : デフォルトの名無しさん [sage] 2018/04/15(日) 19:32:20.73:q8wZBRrJ つか非表示のシートにでも画像貼り付けとけば良いんじゃねえのか : デフォルトの名無しさん [sage] 2018/04/15(日) 19:35:37.64:koN3j5aX htmlでいいじゃん : デフォルトの名無しさん [sage] 2018/04/15(日) 21:09:55.26:Pzh/Cu9E とりあえずそのまま画像を貼り付けることにして作ったのですが、奇妙なバグが出て困りました 特定の画像ファイルだけ、指定したセルの一つ左上(C5に貼ろうとしたらB4)に貼り付けられます それも、特定のワークシートに貼った場合のみです 同じ画像を2枚のワークシートに場所を変えて貼るのですが、(順番は無関係と思いますが) 最初のシートには正しく貼れて、次のシートだとズレてしまいます たくさんある中の数個だけで発生する現象で、何の根拠もなくペイントブラシで画像をちょっとだけ トリミングしたら発生しなくなりました 何が起きているのかわかる方いないでしょうか 下記のプロシージャを2回呼んでいて、違うのは引数のtargetRangeだけです ' 指定のセルの位置に画像ファイルのイメージを等倍で貼り付ける Private Sub PasteImageFromFile(targetRange As Range, imageFilePath As String) Dim image As Shape Set image = targetRange.Worksheet.Shapes.AddPicture( _ filename:=imageFilePath, _ LinkToFile:=True, _ SaveWithDocument:=False, _ Left:=targetRange.Left, Top:=targetRange.Top, _ Width:=-1, Height:=-1) image.LockAspectRatio = msoTrue End Sub : デフォルトの名無しさん [] 2018/04/15(日) 23:51:47.37 何が起きてるかは知らんけど、貼り付けてからもう一回位置調整すればええんでね? : デフォルトの名無しさん [sage] 2018/04/16(月) 00:20:34.44:f3RnCMph ツールバーにボタンとか並べる場合って方向操作できないですか? 普通に追加してると右方向に順番に並んでいくようですけど そうじゃなくて下方向に数個ずつ並べていきたいんですが : 766 [sage] 2018/04/16(月) 06:08:33.87:6ZwybagU 当面の対応としてはそれでしのげるのですが、何が起きているのかわからないと、 処理そのものにバグが残っていることになるので後々困るな、と 後々深刻な症状に発展しないとも限りませんし : デフォルトの名無しさん [sage] 2018/04/16(月) 07:16:08.06:kK8liqj6 Excelのバージョンは? ぐぐると2007で貼り付け位置がずれるバグがあったみたい : デフォルトの名無しさん [sage] 2018/04/16(月) 07:46:35.83:6ZwybagU excel2010を使ってます 画像データをトリミングしたら再発しなくなったのですが、今度は再現ができなくなりました バックアップとっといてからやるべきだった : デフォルトの名無しさん [sage] 2018/04/17(火) 00:03:37.71:7EYd60LZ VBAでAPI使うのってどれくらい難しい? 教本の中級レベルなんだが、最終的にはそれくらいやりたいなと思ってる 結局"何をするか"に拠るんかな : デフォルトの名無しさん [sage] 2018/04/17(火) 00:08:06.60:71rZXGtd ただ使うだけなら全然難しくない APIを使ったサンプルをコピペするだけで使えるやつがネットにいっぱいある 大変なのは何万個もあるAPIの中から欲しい機能を見つけ出すこと : デフォルトの名無しさん [sage] 2018/04/17(火) 01:01:25.08:7EYd60LZ ありがとう とりあえずその拾い物から使ってみる : デフォルトの名無しさん [] 2018/04/17(火) 06:57:42.37:7Dpz+bU0 その何万個もあるAPIを見つけるのに良いサイトとか知りませんか? あれば教えて頂きたいです さらに出来れば日本語だとベストなのですが : デフォルトの名無しさん [] 2018/04/17(火) 07:04:55.69:9jZKmgYa ttps://msdn.microsoft.com/en-us/library/windows/desktop/ff818516(v=vs.85).aspx : デフォルトの名無しさん [] 2018/04/17(火) 07:20:21.18:7Dpz+bU0 ありがとうございます でも英語なのでチンプンカンプン 日本語のコードサンプル解説がないと理解しにくいんですよね もっと勉強します! : デフォルトの名無しさん [sage] 2018/04/17(火) 11:41:46.89:PYkzn9qy win32api vba でぐぐればいっぱい出てくるやん : デフォルトの名無しさん [] 2018/04/17(火) 11:55:31.70 C++やC#向けのサンプルコードを見てVBAで使えるようになれば一人前 : デフォルトの名無しさん [] 2018/04/17(火) 12:17:48.81:VAUeyy7y ただのコピペやんw : デフォルトの名無しさん [] 2018/04/17(火) 17:43:34.64 昔ちょっと苦労した覚えがあると思ったら、あれはPerlでWindows APIを使うときだった : デフォルトの名無しさん [sage] 2018/04/17(火) 17:50:27.17:PN1o89Xi piaでエクセルの機能呼び出してるコード見ると勉強になるよな : デフォルトの名無しさん [] 2018/04/17(火) 17:53:34.87:xUsXMLJ+ チケットPIA? : デフォルトの名無しさん [sage] 2018/04/17(火) 18:57:49.21:Sro26Cmq ・すべての変数がグローバルかつ型宣言文字を使っての指定 ・使われていない関数の山 ・どこからも参照されていない変数の山 ・変数名・関数名が英語・日本語・ローマ字の混在 こんな凄まじいコードを修正・機能追加することになって泣いています 自分まだプログラマ歴1年未満なので、単に超絶技巧コードを見て理解出来てないだけという可能性もあるなと思いここに来ました vbaのコードではこういう読みにくいのも割とあるものなのでしょうか。そしてこういう書き方でも実は良いとされる場面があったりするのでしょうか : デフォルトの名無しさん [sage] 2018/04/17(火) 19:12:22.44:upC1/Erc 何日間で何人でどういう内容の作業をするの? オジサンにおしえてごらん♪ 価値相当の価格なのかも知らんし : デフォルトの名無しさん [sage] 2018/04/17(火) 19:33:49.32:3oXUXGvj VBAでは割とよくあるよ 基本的にみんな低レベルだからコードも汚い まあ書き直したほうがマシだろうね : デフォルトの名無しさん [] 2018/04/17(火) 21:47:12.39:9jZKmgYa VBA担当は新人または使えないおっさんと相場が決まってるからな : デフォルトの名無しさん [sage] 2018/04/17(火) 22:15:51.49:OguVeWqq プログラマーとは認められない者 エクセルエンジニアw : デフォルトの名無しさん [sage] 2018/04/17(火) 23:50:58.95:jnGKhzNu セルを変数代わりに使う素晴らしい見識をお持ちのクソジジイが同じ部署にいる : デフォルトの名無しさん [sage] 2018/04/18(水) 00:19:02.87:Av//TRQH 教本を読んでると ・メンテナンスしやすいスクリプト ・誰が見ても分かるスクリプト みたいな項目が必ずと言っていいほど出てくるんだが、 酷いのはそんなに酷いのか? 今の職場は自分1人だけしか作ってないから可否が分からん : デフォルトの名無しさん [sage] 2018/04/18(水) 00:26:46.75:RSRnSjrn コード読めないって言っているヤツは単なる知識不足が大半だけどな : デフォルトの名無しさん [sage] 2018/04/18(水) 01:23:10.31:ABcs9Eg1 シートにフォームコントロールのボタンがあって、押すとシート上で条件を満たすセルを変化させる そういうコードを書こうと思ってます。この場合、標準モジュールに書くべきですか?それともシートモジュールに書くべきですか? 一応前者かなとは思ってるんですが 変数名の付け方とかコメントとかそういうところでほんと読める読めないが変わってくることを最近実感してますね : デフォルトの名無しさん [sage] 2018/04/18(水) 01:38:15.90:RSRnSjrn 計算式とかは標準モジュールでもいいと思うけど全部シートモジュールの方が面倒が無い 別のシートから同じ関数呼び出したいとかいう話になってから切り分ければいい : デフォルトの名無しさん [sage] 2018/04/18(水) 04:08:59.43:vJ9/iAQD > 型宣言文字を使っての指定 とは何ぞ? データ型定義が凄まじいコードということ? : デフォルトの名無しさん [sage] 2018/04/18(水) 04:20:24.72:RSRnSjrn 文字の後ろに特定の文字を加えると、その型での変数を宣言できるんだよ Sub test() i$ = "test" Debug.Print i End Sub みたいな書き方が出来る。 ヘルプでString型とかLong型とかの項目見てみると「型宣言文字は〜〜です。」って載ってる。 : デフォルトの名無しさん [sage] 2018/04/18(水) 04:38:46.99:vJ9/iAQD ああ、昔見た気がする。 VBAでも使えるんだね。書く機会があればイヤガラセで多用してやろう。 : デフォルトの名無しさん [sage] 2018/04/18(水) 09:24:59.94:ins5325S 型宣言文字は互換性維持のための隠れ仕様にしてくれ リファレンスに易々と載せるべきではない : デフォルトの名無しさん [] 2018/04/18(水) 12:24:01.12:LApBWp2e 「その程度に簡単に思いつく弊害のような事をリファレンスの作成者が気付いてない訳がない」 というとこまで考えが及ばないほど自分の思慮が浅い事には気がついた方が良いと思うよ : デフォルトの名無しさん [sage] 2018/04/18(水) 14:03:23.26:k8PiJXI5 正直、型宣言文字の何が弊害なのかよくわからない 今は使ってないけど昔は使ってて、これといった害はなかったからね : デフォルトの名無しさん [sage] 2018/04/18(水) 14:16:43.80:RSRnSjrn Dimとか無しでコードの途中で自然に宣言できるので、 HowTo本に出てくる伝説の存在「全ての変数が最初に書かれていないとコードの読解に支障を来す勢」にとって不利なんじゃない? : デフォルトの名無しさん [sage] 2018/04/18(水) 16:27:48.27:k8PiJXI5 ああなるほど Dim a& みたいな使い方しかしてなかったから無縁だな しかしすべての変数が冒頭になきゃいけない人たちって、Exit Function や Exit Sub のあとに出てくる変数も そうなのかね? : デフォルトの名無しさん [sage] 2018/04/18(水) 16:49:41.54:FXGDHP9F 初めて知ったがこれはむしろC#のvarみたいで必要な機能だよなこれ(同じだよな?) 問題は変数名$っていう目に優しくない文法だけだ : デフォルトの名無しさん [] 2018/04/18(水) 17:00:05.48 そんなんモジュールの先頭にまとめるだろ 関数定義の後に出てくるモジュール変数とか鳥肌が立つわ : デフォルトの名無しさん [sage] 2018/04/18(水) 17:05:46.97:k8PiJXI5 関数内ローカル変数の話だよ : デフォルトの名無しさん [sage] 2018/04/18(水) 17:58:52.75:d/mhsB/j テキストファイルをline inputでループして自分の名前が入っていたら、エクセルに張り付けていきたいんですけど、その際に抜き出した行を消してテキストファイルを更新して、最終的には自分の名前のないテキストファイルにするにはどんな作り方ですか? : デフォルトの名無しさん [sage] 2018/04/18(水) 19:40:47.78:GNqfI2kR 抜き出さなかった行を別のファイルに追記していく 最後に元ファイルけして、別ファイルを元ファイルにリネームする : デフォルトの名無しさん [sage] 2018/04/18(水) 22:25:17.86:kL5iQ307 N88-BASICもマイクロソフト製だったから、文字列変数には$、倍精度実数は#を付けるとか、当時は必須の知識だった ところでDEFINTはVBAでも使えるんかな? : デフォルトの名無しさん [] 2018/04/19(木) 00:41:36.44:Z28Cxj5J デフィングフタッ! : デフォルトの名無しさん [] 2018/04/19(木) 12:06:57.90:+4ib45ZB ファイルの拡張子をBakにする それを読んで必要な行を元のファイル名に出力する これで必要な行が無ければファイルも消える : デフォルトの名無しさん [] 2018/04/19(木) 12:18:21.18 更新する必要がないときにファイルを更新してしまうのは下策中の下策 : デフォルトの名無しさん [] 2018/04/19(木) 12:21:25.32 数百MBあるようなファイルじゃなければ、 一括で文字列として読み込んで 一行ずつ処理して出力用の新しい文字列を組み立てて 読み込んだ文字列と新しい文字列に差分があれば ファイルに一括で書き込むのが 性能面でも処理の分かりやすさでも優れてるよ : デフォルトの名無しさん [] 2018/04/19(木) 12:22:32.15:F3Bh1jYP 更新する必要がないのに更新されてしまったら それは下策ではなくバグやぞ
凡例:
レス番
100 (赤) → 2つ以上レスが付いている
100 (紫) → 1つ以上レスが付いている
名前
名無しさん (青) → sage のレス
名無しさん (緑) → age のレス
ID
ID:xxxxxxx (赤) → 発言が3つ以上のID
ID:xxxxxxx (青) → 発言が2つ以上のID
このページは2ch勢いランキング が作成したアーカイブです。削除についてはこちら 。