21/02/18 02:16:18.22 QcGF+jUk0.net
それこそ自分で作れよ
自分だけにに都合よく自動化したいならそれしかないだろ
715:デフォルトの名無しさん
21/02/18 08:21:36.53 sd++046d0.net
>>711
そういうの別言語だと見たことあるけど
VBAでは諦めた方がいいんじゃないかなぁ
URLリンク(mobile.twitter.com)
こういう奴でしょ?
(deleted an unsolicited ad)
716:696
21/02/18 08:30:28.40 0xKDo7Uv0.net
最終列の取得をしてコピーしたいと申した者です
具体的には2シート目以降のC8セルから最終列までコピペしたくこのような文を書いてました
Maxcol = Worksheets(1).Range(“C8”).End(XlToRight).Column
For i = 2 To Worksheets.Count
Worksheets(i) = Range(Cells(8,3), Cells(8, Maxcol)).Copy
Worksheet(1).Cells(Maxrow,1).PasteSpecial Paste:=xlPasteValues
Maxrow = Maxrow + 1
Next i
上には書いていませんがMaxRowで最終行していて、1シート目の最終行にペーストするイメージです
このとき以下の箇所でエラーになりました
Worksheets(i) = Range(Cells(8,3), Cells(8, Maxcol)).Copy
717:デフォルトの名無しさん
21/02/18 08:31:50.99 cssKdxraM.net
>>713
やっぱVbaだと厳しいか、、、別言語だとこんなのあるんだな!ありがとう。
718:696
21/02/18 08:45:37.53 0xKDo7Uv0.net
解決しました…
Rangeの中にCellsを入れる際はCellsの方にもワークシート名を記載してあげなければいけなかったんですね…
お騒がせしました
719:デフォルトの名無しさん
21/02/18 10:27:10.11 4sNPnSsIM.net
4点指定でrange作れればいいのにね
720:デフォルトの名無しさん
21/02/18 13:38:16.10 EVRbmhyV0.net
>>717
まあ、
Sheet.Cells(開始行, 開始列).Resize(行数, 列数)
もしくは
Sheet.Cells(開始行, 開始列).Resize(終了行 - 開始行 + 1, 終了列 - 開始列 + 1)
ってやるだけだし
721:デフォルトの名無しさん
21/02/18 17:41:06.06 Khd0zmwWM.net
>>714
これで動くのか
それならまあいいけども
722:デフォルトの名無しさん
21/02/18 20:47:31.34 Sdz2Rpjn0.net
コンパイルしたときに「ユーザー定義型は使用できません」といったようなエラーが出るのですが、
エラー箇所が選択されず特定できません。
ググってみたのですが「関数を一個ずつ切り貼りしながらコンパイル」的な記事しかなく、
結構大きなプロジェクトファイルになってしまっていて現実的ではありません。
原因って何が考えられますでしょうか。
723:デフォルトの名無しさん
21/02/18 21:08:20.83 QcGF+jUk0.net
情報が少なすぎるだろ
で、ユーザー定義型を使ったの?
724:デフォルトの名無しさん
21/02/18 21:48:45.33 sd++046d0.net
>>720
VBAでは珍しいかも知れないけど
VBSではよくある話
実行前コンパイルの概念がないからね
別に1関数単位で抜かなくても
纏めてごっそり抜いてみて
エラーが発生しなくなったら
残った部分には原因がなくて
抜いた部分に原因があるんで
まずそうやって切り分ける
抜いた部分から半分くらい戻してやって
またエラーが起きないか確認するのを
繰り返して行く内に
原因の可能性がある範囲はどんどん狭まるんで
そうやって確認して行く
725:デフォルトの名無しさん
21/02/18 21:52:25.45 sd++046d0.net
原因として考えられるのは
ない型を指定した場合なので
型宣言の書き間違えとかかな
726:デフォルトの名無しさん
21/02/18 21:59:48.04 Sdz2Rpjn0.net
>>721
使ってます。
また、クラスモジュールやライブラリも沢山使ってます。
以前なら間違っている名前の箇所が選択されるので、直ぐに原因が特定できたのですが・・・
>>722
今、出来る範囲でモジュールを解放・インポートを繰り返して検証して見たのですが、
フォームモジュールのいくつかが原因の様で、これらを抜くとコンパイル(実行前コンパイル)が成功します。
ただ、その原因と思われるモジュール内の全てのコードを削除しても同じエラー発生します。
意味が分かりません・・・
727:デフォルトの名無しさん
21/02/18 22:36:52.79 Xk2lzcuAM.net
フォーム内のエラーはフォーム呼び出しコードが選択されるから、F8の手押し連打で進めて行けばエラー箇所で止まるんじゃね
728:デフォルトの名無しさん
21/02/18 23:05:06.07 jY4O/2kG0.net
いつもの人っぽいけど、クラスモジュールでエラー止める設定すれば分かるかもしれん
729:デフォルトの名無しさん
21/02/18 23:14:40.89 Oj+90OvE0.net
>>726
シートに書くとエラーの場所がわからないから標準モジュールに書け、
なんて書いてるサイトがあって、その解決策しばらく気づかなかったわ
730:デフォルトの名無しさん
21/02/18 23:38:17.80 chyUcvsN0.net
ズボラせず1個ずつちゃんと調べなよ
731:デフォルトの名無しさん
21/02/19 00:07:23.60 3RXIcFsGH.net
DimとかConstとかでタイプミス
SubやFunctionの宣言部でもよくある
Visual StudioでVB.netプロジェクトを作ってコピペで発見できる場合もある
732:デフォルトの名無しさん
21/02/19 03:59:43.95 fFtIagGX0.net
>>725,726
実行時例外じゃないです。
>>728
>>724の通り、発生元と思われるモジュール内コードを全て削除しても発生し、
モジュール自体を解放すると発生しなくなるため悩んでいます。
私も一個づつ調べたいのですが、もはや調べ方も分からない状況です・・・。
>>729
宣言文のタイプミスでも、通常はエラーが発生すれば原因箇所が選択(反転)されると思いますが、
今回はそのエラー箇所の選択がなく困っています。
vscodeですがVB.netプロジェクトへのコピペもやってみましたが、
関係のないエラーや注意が大量発生して特定困難でした。
というか互換性ないと聞いたのですが・・・
733:デフォルトの名無しさん
21/02/19 04:14:33.39 fFtIagGX0.net
お礼言うの忘れてました。
沢山回答ありがとうございます。
些細な事柄でも気になる点があればレス欲しいです。
一応質問内容をまとめます
・エラーが発生しているのはコンパイル時です
・通常あるエラー発生箇所の選択がされません(この「発生個所が選択されないという現象」自体の原因も調べています)
・原因と思われるクラスモジュールを解放すると発生しなくなります
・しかし、そのモジュール内のコードを消すだけでは引き続き発生します
734:デフォルトの名無しさん
21/02/19 05:06:58.61 UOwA+kJV0.net
なるほど
つまりVBAのコード側の問題ではないと
詳しい状況が分からんから何とも言えんけど
考えられる状況としては
・ファイルがぶっ壊れてる
・フォーム側に使ってるバージョンにそぐわないオブジェクトが設定されている
・使ってるバージョンにそぐわないAPIとかが使用されている
・何か変な参照設定切ってそれを使ってる
とかじゃない?
クラスとかライブラリ(何をもってライブラリと言ってるのかは分からんけど)使ってて
結構大きなプロジェクトファイル使ってると言うなら
元々動いてたものだったと思うんだけど
今改修を掛けているものが同じ環境下(EXCELのバージョンとか使ってるならランタイムとかが同じ)
で動くか確認した方がいいんじゃないかと思うよ
735:デフォルトの名無しさん
21/02/19 05:44:12.15 6sfyeCMi0.net
>>731
クラスモジュールを開放したあと、同名のクラスモジュールを空で新規追加したらどうなるの?
そのクラスモジュールの名前は何?
736:デフォルトの名無しさん
21/02/19 14:25:58.33 fFbWPHDZ0.net
ユーザ定義型は定義されていません
737:デフォルトの名無しさん
21/02/19 21:58:08.64 p5a0AjpTa.net
>>724
インポートとかすると改行や全角空白、タブ、eofとかがおかしいのが入ることあるよ
738:デフォルトの名無しさん
21/02/19 23:14:07.14 FBAC49/30.net
ぶっちゃけ原因不明でコードを新規ブックにそのままコピペしたら動いたってのは何度かあった
理由がわからんだけだったのかもしれないけど
739:デフォルトの名無しさん
21/02/20 00:17:20.20 /mom05J70.net
怪しい辺りを切り取り貼り付けで直るパターンもあった
740:デフォルトの名無しさん
21/02/20 02:39:20.18 exEQDxd80.net
エクスポートして新規ブックでインポートしてどうなるか試せ
そのクラスモジュールとやらをどっかに張ればなんかわかるかもしれん
741:デフォルトの名無しさん
21/02/20 10:48:29.96 +4W1iOYZ0.net
帳票でひな形ファイルにDBからのデータを張り付ける際に
ひな形ファイルに前もって用意している一覧より件数が多くなり
一覧部を増やす際って存在している行を必要分コピペしたら処理が重く遅くなりますか?
範囲指定して行の高さや罫線その他書式を作成していくのが普通ですかね
742:デフォルトの名無しさん
21/02/20 11:52:03.51 FtzhhzvS0.net
1件ずつコピペしてたら遅くなる可能性があるけど
必要な行数を計算してコピペ1回なら問題にはならんのじゃないかな
743:デフォルトの名無しさん
21/02/20 13:27:35.51 GLzvS33R0.net
すげえ基本的な話だけど
2003と2019じゃソースを書き換えないと使えないのはわかるけど
2015と2019は使えるの?
744:デフォルトの名無しさん
21/02/20 18:00:11.01 M8GDG/5fa.net
自分で試せばいいのに
745:デフォルトの名無しさん
21/02/20 20:13:12.43 OBWJcVSW0.net
書き換えないといけないところが分かるなんてすごい実力者だね
746:デフォルトの名無しさん
21/02/21 00:07:25.30 J4wkOwtc0.net
複数バージョン持ってないと試せんだろう
747:デフォルトの名無しさん
21/02/21 00:25:53.91 yZKJ3RszM.net
どっちでも動くように作るのさ
748:デフォルトの名無しさん
21/02/21 02:57:17.71 PfdFyViG0.net
持ってないバージョンで動かないかもとか考えなくてもよくね
749:デフォルトの名無しさん
21/02/21 03:11:53.20 NVBTtkD2H.net
逆に、2019だけで動くようにしろと言われてもできる気がしない
わざと追加されたワークシート関数を使うみたいな、手段と目的を逆転させるのは無しで
そんなに言語仕様って変わってたっけ?
750:デフォルトの名無しさん
21/02/21 03:19:27.77 BLnKvBaX0.net
VBAの言語仕様なんて、64ビット対応しか変わってないだろ
EXCELのアプリケーションモデルは多少の変化はあったかもしれんが
751:デフォルトの名無しさん
21/02/21 09:10:45.20 Mdn5KR7p0.net
基本使えるだろうけど
365のは分からん
752:デフォルトの名無しさん
21/02/21 09:54:57.69 E7dwtz5J0.net
2019未満は切り捨てるためにわざと2019仕様に変更とか
わからん
753:デフォルトの名無しさん
21/02/21 18:05:27.14 bOGV4XR6a.net
古いのいつまでも使われると新しいの売れないからかな
754:デフォルトの名無しさん
21/02/22 11:45:30.79 FCcJxvZt0.net
>>747-748
動かなくなる原因は言語仕様だけじゃないよ
2007 辺りでグラフ周りがかなり変更されてソースに手を入れる羽目になったとかある
755:デフォルトの名無しさん
21/02/22 13:18:52.42 kOquHQc20.net
そうっすか
756:デフォルトの名無しさん
21/02/22 17:32:51.40 /Yenw0XZd.net
>>752
正にそれ結構大変だった。
757:デフォルトの名無しさん
21/02/24 00:40:47.03 HDXsWzJB0.net
VB長けてる人ってExcelの機能関数に疎い人多いね
田中に聞けば?
758:デフォルトの名無しさん
21/02/24 01:26:36.59 QrJrBlgW0.net
Worksheetfunction使うのでそれはない。
759:デフォルトの名無しさん
21/02/24 02:17:27.39 CQQJwOCp0.net
2019欲しいけど
いまクソ高いんだよな
昔は10000ぐらいで買えたよな?
760:デフォルトの名無しさん
21/02/24 02:42:57.68 +tup+0KC0.net
今でも1000円で…
761:デフォルトの名無しさん
21/02/24 02:59:15.91 CQQJwOCp0.net
割れは怖くて使えんわ
762:デフォルトの名無しさん
21/02/24 14:09:58.51 HLiwO+Yd0.net
64bitで未定プログレスバー使うにはどうすればいいの?
763:デフォルトの名無しさん
21/02/24 19:44:17.34 CpCHMr0L0.net
オレの2019はアマゾンで900円くらいだ
764:デフォルトの名無しさん
21/02/25 21:11:18.01 u/u+FiSza.net
原本となるシートでマクロが動いて欲しくないからマクロを搭載した別ブックのシートにコピーしようとしてるのだけど、activeXコントロールのコピーで詰んでいる。
selectAllすると位置がずれる、ネットで見かけるfor each x in sheets.Shapes方式だと「rangeクラスのTopプロパティを設定できません」とか出る(原因分からないうえ、同じものが複数コピーされてたりする)
Clickメソッド使ってるからシート自体に記述しなくちゃならない状態(原本にマクロを搭載できない理由でもある)
原本をコピーした新しいシートにマクロを転写する方法か、activeXコントロールをうまくコピーする方法などをどなたか分かれば教えてください。
よろしくお願いします
765:デフォルトの名無しさん
21/02/25 21:28:47.82 mAZPOqOP0.net
俺はファイルコピーで解決しようとするから知らんわ
766:デフォルトの名無しさん
21/02/25 22:14:57.96 zfgrXATG0.net
シートコピーしたら
767:デフォルトの名無しさん
21/02/25 23:11:51.37 h5Yd8P0i0.net
デザインモードじゃないから梃子でも動かないって意味か?
768:デフォルトの名無しさん
21/02/26 03:13:02.34 RTjFElvVH.net
>>762
ブックを別名で保存してからそっちを開いたら?
コントロールの状態や中身まで含めた完全なコピーが簡単にできるよ
769:デフォルトの名無しさん
21/02/26 14:42:35.05 uwtwTRSf0.net
>>760
わいはコントロールやめてユーザーフォームで自作した
770:デフォルトの名無しさん
21/02/26 18:00:57.54 3R2zb4XV0.net
>>762
原本はそのままで動くように作っといて、原本をコピーするマクロは原本とは別ファイルにするのが良いんじゃね
771:デフォルトの名無しさん
21/02/27 04:24:42.64 RGn50kCua.net
>>768
フールプルーフの観点で原本にプログラムを直接書きづらいんですよね。このツールを使うのも原本を更新するのも私じゃないので…
>>767
フォームなら別のブックにコピーできるし使いたいんですが要件的に使えないんですよね
最初はフォームで動作するものを作ったんですが、いちいちウィンドウが開くのめんどくさいと一蹴されました
あくまでシートにマクロをコピーする方法か、activeXコントロールの綺麗なコピーの方法を探しています。
772:デフォルトの名無しさん
21/02/27 04:28:43.21 qDfn4Zqt0.net
>>769
みつかるといいね
773:デフォルトの名無しさん
21/02/27 08:38:37.65 +dnfLZll0.net
>>769
出来るけど、セキュリティ的に大問題アリ。
マクロウイルスのやりたいことと一緒だからな。
774:デフォルトの名無しさん
21/02/27 10:42:13.72 MpvSTRAea.net
ウイルスの作り方探してるのかな
775:デフォルトの名無しさん
21/02/27 16:48:22.46 9QiTc1mX0.net
質問です。
VBAでウィンドウの幅によってレイアウトが変化するページを取り込む方法で詰まっています。
例えば、下記のURLのテーブル「5」をExcelに取り込みたいとします。
しかし、このページはウィンドウの幅を狭くすると「自動レイアウト」になります。
URLリンク(www.nankankeiba.com)
URLリンク(i.imgur.com)
本当はPC固定レイアウトで取り込みたいのですが、下のVBAだと自動レイアウトの方で取り込まれてしまうのですが
どうしたらよろしいでしょうか。
VBA
URLリンク(i.imgur.com)
PC固定のレイアウトで取り込みたいけど、取り込むとこうなる
URLリンク(i.imgur.com)
776:デフォルトの名無しさん
21/02/27 16:50:21.04 9QiTc1mX0.net
>>773
列や行の関係でPC固定で取り込めるようにしたいのですが、クエリで何か設定などあるのでしょうか
777:デフォルトの名無しさん
21/02/27 19:51:14.14 qDfn4Zqt0.net
>>774
よくわからんが内容は正しく取得できているんだから、表示用のシート作って
そっちに2行を1行にまとめて表示させるマクロ書けばいいんじゃね
778:デフォルトの名無しさん
21/02/27 20:13:53.31 9QiTc1mX0.net
>>775
実は最近サイトがスマホ用に「自動レイアウト」に対応してリニューアルしたので
もともと作ってあった表示用シートが連れてしまうために「PC固定レイアウト」にしたいのです…
779:デフォルトの名無しさん
21/02/27 20:25:57.30 Ydjbk0QN0.net
URLの後ろに何か引数入れればいいんだろうけど、javascript読めんからわからん。
Web系のスレで聞くか、ここでやるんだったらDOM解析してgetElementsByTagNameとかで取得するしかない。
780:デフォルトの名無しさん
21/02/27 20:28:08.24 9QiTc1mX0.net
>>777
やっぱりweb系のプログラミング知識がないと無理っぽいですかね
自分はさっぱりなので、そっち系でも聞いてみます。
781:デフォルトの名無しさん
21/02/27 20:46:04.22 Ydjbk0QN0.net
ってそれExcel2013?
2019だとどちらも見えていて、
Table4が自動でTable5が固定になっている。
もし2019が使えるなら、QueryTables.Addじゃなくて、
Queries.Addでやってみるといい。
782:デフォルトの名無しさん
21/02/27 21:38:16.92 9QiTc1mX0.net
>>779
わあああ!できました!!!
自分のだと、テーブル5だと自動で、テーブル6が固定でした!!
固定と自動でテーブルずらすだけで良かったんですね。
本当に助かりました;;感謝!
783:デフォルトの名無しさん
21/02/27 21:44:40.46 9QiTc1mX0.net
なるほどー
URLの違いじゃなくてテーブル数が増えていてテーブルの変更でレイアウトを別々で読み取っていたんですね
今後も参考になる知識でめっちゃタメになりました!
いやーID:Ydjbk0QN0さんの着眼点のおかげで助かりました。感動です
784:デフォルトの名無しさん
21/02/27 23:59:01.77 W4zZ+WShM.net
いいってことよ(≧∇≦)b
785:デフォルトの名無しさん
21/02/28 00:38:35.67 1YMxSz2W0.net
XMLを取得したあと、要素を取得するためにgetElementByIdを使用する方法は無いでしょうか?
XMLでは仕様上IDの規定が無いのでこのメソッドは無いようですが、
対象にしているデータはIDが重複していない(タグ名は重複)ことが分かっています
786:デフォルトの名無しさん
21/02/28 08:33:47.20 0O+t6o860.net
やったことないけどXMLをブラウザーで開いて取得とか
787:デフォルトの名無しさん
21/02/28 13:49:51.41 0oELj/fSM.net
>>783
単なる属性値だからxpathで属性検索すればいいんじゃね?
788:デフォルトの名無しさん
21/02/28 17:16:05.41 1YMxSz2W0.net
>>785
ごめんなさいこれで出来ました
コーディングミスしてただけだったようで…
789:デフォルトの名無しさん
21/02/28 23:20:44.51 Kw7HIYRo0.net
テーブルを使った列転記について質問です。
オートフィルターを使って、
特定条件に合致する列のみを別シートに転記するvbaを作成しています。
検索条件が1件でもヒットすれば、うまく動くのですが、
検索条件の結果が0件の場合、なぜかテーブル内にある全ての列がコピーされてしまいます。
解決方法をご教示いただけたら幸いです。
With Range("A3").ListObject
.Range.AutoFilter 1, "佐藤"
.Range.AutoFilter 2,"2020"
.Range.AutoFilter 3, "土地"
.ListColumns(4).DataBodyRange.Copy Sheets(2).Range("B12")
.ListColumns(5).DataBodyRange.Copy Sheets(2).Range("D12")
.ListColumns(6).DataBodyRange.Copy Sheets(2).Range("C12")
End With
790:デフォルトの名無しさん
21/02/28 23:38:01.73 aFXd9lq10.net
0の時コピペしない
791:デフォルトの名無しさん
21/03/01 03:56:15.13 eH/icf8Z0.net
Countifsで、1件以上の時 と
条件分岐させるのが読み返してわかりやすくなるんでね
792:デフォルトの名無しさん
21/03/01 16:05:10.88 SmQDGBhxa.net
前回の表示が残っているならメッセージボックスとか出すといいかも
793:デフォルトの名無しさん
21/03/02 13:09:41.26 hWjLfumtC.net
(1)A1~A100セルにそれぞれ0001.txt~0100.txtという文字列が格納されている
(2)ファイルサーバ上(\\share\txt)に(1)の名前と対応する実際のテキストファイルが格納されている
→この場合、B1~B100セルの中に(1)と対応する(2)のテキストファイルの中身を自動で入力させたいのですが、どのようにすれば可能でしょうか。。
794:デフォルトの名無しさん
21/03/02 13:28:23.53 xn7W4wyt0.net
丸投げか?
まずは自分で作ってみろよ
795:デフォルトの名無しさん
21/03/02 13:38:46.86 Myd7KGhQ0.net
先生が添削してくれるみたいです
796:デフォルトの名無しさん
21/03/02 15:10:40.09 S4zyTxBwM.net
A1セルに書かれたファイル名を読み取る
そのファイル名を開く
B1セルから書き込む
を繰り返せばいいと思います
797:デフォルトの名無しさん
21/03/02 17:47:07.08 stzBjdlCH.net
いつもの人
798:デフォルトの名無しさん
21/03/02 19:42:52.19 h1fr2K930.net
>>791
どうでもいいがB1~B7へは入力じゃなくて出力って言った方がいい
799:デフォルトの名無しさん
21/03/02 23:19:45.83 yDNF8xvg0.net
>>791
マクロの自動記録
800:720
21/03/03 02:30:35.83 hWQCqBl50.net
>>720ですが、解決というか悪化したので一から作り直すことにしました。
原因と思われていたフォームモジュールを解放しても常時コンパイルエラーが発生するようになりました。
思い切って順に全て解放しながらコンパイルしてみたところシートを含めた全てのモジュールを
削除して新規シート一枚の状態でも発生する始末です。
>>733
試してみたところ、使用できない文字を使った時と同じ「不正なオブジェクト名」だと怒られます。
(もし重複なら「既に~使われています」)
コンパイルエラーの原因にある「ユーザー定義型」というのはフォームのモジュール名の事だったのかも・・・
ちなみに原因らしいフォームのモジュール名を変えても同様のコンパイルエラーは発生し、
その新しいモジュール名でも同じ症状が出るようになります。
>>732
>>何をもってライブラリと言ってるのかは分からん
すみません。参照設定にあるCOMコンポーネントの事です。
APIはSleepしか読み込んでおらず、
コントロールもリストボックスとコマンドボタンとオプションボタンのみです。
元の環境で実行も出来ませんでしたが、
テストで色んなモジュールの解放してインポート、モジュール名変更して戻すを繰り返していると、
プロジェクトのコンパイルは同じエラーがでるが、(環境問わず)実行は可能という状態になりました。
コンパイルのテストしかしていなかったのでどのタイミングで実行可能になったのかは分かりませんが、
引き続き調べてみます。
801:720
21/03/03 02:46:34.41 hWQCqBl50.net
>>733
レスに追加です
名前の変更では「不正なオブジェクト名」と出ますが、その名前でのインポートは成功します。
インポート出来れば自由にフォーム名を変更したり戻したりできました。
>>735
見てみましたが、特に変わりはないようです。
>>738
フォームモジュール以外を全部移したところコンパイルが通りました。
同じフォームを作って再発すると怖いので、
フォームに有ったコントロールはシート上に再現して、とりあえずこれで運用してみることにしました。
802:デフォルトの名無しさん
21/03/03 21:19:07.61 CdcHt2GZ0.net
シートの中身を初期化しようと、範囲選択してClearcontentしたら処理が滅茶苦茶重くて
他のどの処理よりも一番重いまであります
セルの中身をクリアして真っ新にしたいんですが、軽くなる方法とか削除するのに他のいい方法は何かありますか?
803:デフォルトの名無しさん
21/03/03 22:01:26.45 x1QDDRPj0.net
画面更新切ってないとか
804:デフォルトの名無しさん
21/03/03 22:53:36.00 cY/9Er0+0.net
場合によってはシートごと削除&同じ名前のシート作成orテンプレで用意していたシートをコピー
805:デフォルトの名無しさん
21/03/03 23:58:49.06 zTCiutcbd.net
>>800
Clearcontentsじゃなくて単に「削除」に時間が掛かってるだけ説。
どうしようもないExcelのバグ、俺もこの前株シミュレーター作ってて直面した。
たかだが3万行×1列消すのに10分掛かる糞仕様。
どういうわけかD列とE列に入っているがD列を消してからだとE列が、E列を消してからだとD列がそうなる。
2007と2013入れてたがどちらでも同じ結果。スプレッドシートでならサクっと消せた。
806:デフォルトの名無しさん
21/03/04 00:37:39.40 0V1y42950.net
質問させてください
業務用PCのためDsoFramerのインストールを容易には出来ない環境で、ユーザーフォームにワークシートを表示するシステムを作成するのは厳しいでしょうか
807:デフォルトの名無しさん
21/03/04 02:10:45.74 EcELbNCH0.net
レスありがとうございます
画面更新は勿論切ってます
ただ初期化したいだけなのにアホみたいに時間が掛かるので、同じ使用のシートを作る処理にする事も検討します
808:デフォルトの名無しさん
21/03/04 06:47:21.46 yRtnuXOv0.net
変数に入れてから消すとか、同じ選択範囲の配列(空白)ぶっこんでみてもだめかな
809:デフォルトの名無しさん
21/03/04 10:44:48.81 B7/1q6yvH.net
一気に何万行も消さずに100行ずつとか小分けしたら軽くなったりしないのかな
810:デフォルトの名無しさん
21/03/04 10:49:05.92 1zCrSMV60.net
ClearContentsで重かったことなんてないなあ。
めんどくさくてVBAじゃなくマクロで作って選択範囲小分けのまま放置してるからかな?
811:デフォルトの名無しさん
21/03/04 11:15:36.75 fKYNPqjU0.net
>>800
ふーん
範囲指定して消したらどう?
後、最近のEXCELはひょっとして
セルの内容が変わったら
再計算しているかも知れないから
一応自動計算も切ってみたら?
セル値が変わった時のイベント拾って
何かやってるとかいうオチだったら
問題外だけど
812:デフォルトの名無しさん
21/03/04 11:36:50.11 EtHhkpeQ0.net
スレが見つからなかったのでこちらで失礼します
C8の値が$100にならない理由を教えて下さい
URLリンク(i.imgur.com)
813:デフォルトの名無しさん
21/03/04 11:53:16.96 w9aQykj0M.net
関数変わっちゃうけど代案を出すなら
VLOOKUP(B8,B1:C5,2,FALSE)
とかどう?
814:デフォルトの名無しさん
21/03/04 12:01:03.02 1zCrSMV60.net
なんだこりゃ
LookUpって欠陥あるんかね
815:デフォルトの名無しさん
21/03/04 12:21:33.50 w9aQykj0M.net
LOOKUPって近似値を検索する関数だから文字列探そうとすると上手くいかない事が多かった気がする
だから面倒臭くなってVLOOKUP,HLOOKUPを使うように癖をつけた記憶がある
816:デフォルトの名無しさん
21/03/04 13:49:43.11 1PJYOy7Jr.net
これ思い出したわ
URLリンク(i.imgur.com)
URLリンク(i.imgur.com)
817:デフォルトの名無しさん
21/03/04 13:50:26.95 FInty+sk0.net
新規作成してから試してみたけど$100になったな
818:デフォルトの名無しさん
21/03/04 14:14:53.10 Kq0/JwOuM.net
>>810
C8 が "もり " みたいに空白入ってるとかじゃね?
819:デフォルトの名無しさん
21/03/04 14:47:21.95 skJUg0gJ0.net
検査範囲の値は昇順にしてください
そうでなければ正しい値はえられません
並んでないときはVLOOKUPやHLOOKUPを使ってください
という旨のことをヘルプに書いてある。
820:デフォルトの名無しさん
21/03/04 16:50:41.38 b7V1SruDM.net
LookupにもVLookupやHLookupみたいに検索方法のオプションあればいいのにね
まあMSとしてはExcel最新版にしてXLookup使ってねって言うことなんだろうな
821:デフォルトの名無しさん
21/03/04 18:46:57.78 EcELbNCH0.net
初期化で若干重たいのは取り敢えず諦めることにして、外部のCSVをクエリテーブルで読み込んでから
Refleshでシートに書き込んでるのですが、この書き込む前の段階で、クエリテーブル上で不要な列のデータを削除する事って可能でしょうか?
不要なデータが大量に混ざっているので、全部まとめてシートに書き込むとやはり重たいので軽量化したいのですが……
822:デフォルトの名無しさん
21/03/04 19:49:49.80 V/SEJayw0.net
いつものあいつだな
823:デフォルトの名無しさん
21/03/04 20:49:35.42 yRtnuXOv0.net
lookup系よりindexmatch使うことが多いな
824:デフォルトの名無しさん
21/03/04 20:55:32.61 INwEijJcM.net
lindexmatch使いアピールしてはじめて自称excel上級者として一人前
825:デフォルトの名無しさん
21/03/04 21:28:29.09 Cjl2zDCE0.net
昔はユーザー定義関数作ったけど、今はXLOOKUPがある。
826:デフォルトの名無しさん
21/03/04 22:18:19.39 1zCrSMV60.net
IindexMatchなんぞ使わず、
列をボーンとコピー挿入してVLOOKしてこそ一人前
827:デフォルトの名無しさん
21/03/05 05:33:04.89 eGeMRqFI0.net
いつものあいつて何?
828:デフォルトの名無しさん
21/03/05 09:21:20.59 n//DPju00.net
とうしつの自己紹介
829:デフォルトの名無しさん
21/03/05 21:02:22.60 s30llsqJ0.net
臭う質問者の総称
830:デフォルトの名無しさん
21/03/06 12:22:29.01 yJvSdslEH.net
実際に使ってないような質問をして答えさせて悦に入る人
831:デフォルトの名無しさん
21/03/07 10:26:06.26 FD1rrusm0.net
webページからデータをとってきてセルに格納するマクロを書いています
msxml2.xmlhttpというのを使うとページの内容をgetすることができるのですが、これはどうやらieを利用しているようです
ieはいつなくなるかわからないので他の方法があれば今のうちから変えておきたいのですが、vbaで使える方法で他にどういうのがあるか教えてください
832:デフォルトの名無しさん
21/03/07 10:30:32.44 ZX3XyXetM.net
IEはなくなるのにVBAは大丈夫だと思う理由は?
言語もPythonとかにしてBeautifulSoupやSeleniumでも使った方がよい
833:デフォルトの名無しさん
21/03/07 10:37:32.50 4ExLqYxe0.net
パワークエリはどうかな
834:デフォルトの名無しさん
21/03/07 10:42:14.29 TW4NSoKtM.net
無くなったときのビジネスインパクトはIEよりもVBAの方が遥かに小さいから、MSがどっちか先に切るとしたらVBAだろう
最悪VBAは切られてもExcelのバージョンを塩漬けにして運用できなくはないしな
835:デフォルトの名無しさん
21/03/07 11:28:15.07 zpOLYdVD0.net
>>830
まあそのうちpythonに移行するんでしょうけど、今は慣れない言語を一から勉強してる暇はないので
それで、あなたはvbaでやる他の方法を示せないということでよろしいですか?
>>831
どうかな、じゃなくてどうやるのか教えてください
836:デフォルトの名無しさん
21/03/07 13:02:06.24 JbGOdXToM.net
704 名無し~3.EXE sage 2021/03/01(月) 20:11:45.17 ID:hZCKpI4x
デスクトップ版のVBAマクロに替えてWeb版はOfficeスクリプトがプレビュー中(現在は法人向け365のオンラインのみ)
URLリンク(docs.microsoft.com)
705 名無し~3.EXE sage 2021/03/01(月) 20:16:10.79 ID:hZCKpI4x
Excelの新自動化ソリューション「Office Scripts」プレビュー版が登場
URLリンク(ascii.jp)
Excel操作をJavaScriptで記録 ~Microsoft、“Office Scripts”をパブリックプレビュー
URLリンク(forest.watch.impress.co.jp)
837:デフォルトの名無しさん
21/03/07 13:04:56.15 JbGOdXToM.net
788 名無し~3.EXE sage 2021/03/03(水) 18:26:40.20 ID:5NVXQTtc
Excel関数ベースのプログラミング言語「Microsoft Power Fx」登場 オープンソースで公開予定
URLリンク(www.itmedia.co.jp)
Microsoft、自社製RPAツールを全Windows 10ユーザーに無償提供 マウスクリックやキーボード入力をGUIで自動化
URLリンク(www.itmedia.co.jp)
838:デフォルトの名無しさん
21/03/07 13:46:03.75 5FBwssoR0.net
>>833
なんだただの馬鹿か
煽って聞きだそうとしてもこのスレはいつものあいつで耐性ができた人ばかりだから無理
839:デフォルトの名無しさん
21/03/07 14:06:40.31 4ExLqYxe0.net
触れないようにしてたけど辛辣で草
840:デフォルトの名無しさん
21/03/07 17:25:15.30 CYFzWFvV0.net
>>836
答えられないならレスしなくていいよ
無能に用はないから
841:デフォルトの名無しさん
21/03/07 17:51:15.16 5FBwssoR0.net
>>838
悔し買ったか?馬鹿
842:デフォルトの名無しさん
21/03/07 18:27:16.06 REgzkSN70.net
な、age厨だろ?
843:デフォルトの名無しさん
21/03/07 20:22:49.89 l5mf+U2f0.net
反論できなくてアゲサゲ言い出す奴は見苦しい
844:デフォルトの名無しさん
21/03/07 21:30:58.30 iHuYVCVV0.net
言われて下げてやんのwww
845:デフォルトの名無しさん
21/03/07 22:58:33.05 5FBwssoR0.net
馬鹿は自分が相手にしてるのはただ一人だけと思い込む
846:デフォルトの名無しさん
21/03/08 05:43:53.99 bSh0ioyn0.net
な、age厨だろ?
847:デフォルトの名無しさん
21/03/08 07:03:19.05 +AeHqC2j0.net
自己紹介www
848:デフォルトの名無しさん
21/03/08 09:05:36.54 +ItxpBbz0.net
類友
849:デフォルトの名無しさん
21/03/08 09:36:00.68 gk28PyLU0.net
もはや論点なにそれ状態
850:デフォルトの名無しさん
21/03/08 10:52:47.61 TrYviUKj0.net
保存して閉じる処理をしても、ファイルは閉じてもExcelはとじません
Private Sub Workbook_BeforeClose(Cancel As Boolean)
'処理
Application.DisplayAlerts = False
Application.Quit
ThisWorkbook.Close savechanges:=True
Application.DisplayAlerts = True
End Sub
これでもダメでした
Application.Quit
ThisWorkbook.Close savechanges:=True
851:デフォルトの名無しさん
21/03/08 11:07:15.73 9xs5g46P0.net
ActiveWindow.Close
852:848
21/03/08 11:38:58.50 TrYviUKj0.net
>>849
Application.Quit
ThisWorkbook.Close savechanges:=True
ActiveWindow.Close
これもダメでした
853:デフォルトの名無しさん
21/03/08 11:53:11.92 9xs5g46P0.net
Application.Quit
Application.DisplayAlerts = False
ThisWorkbook.Close savechanges:=True
Application.DisplayAlerts = True
854:デフォルトの名無しさん
21/03/08 11:57:13.64 vFSNvomr0.net
Application.DisplayAlerts = False
If Workbooks.Count = 1 Then
Application.Quit
Else
ThisWorkbook.Close
Application.DisplayAlerts = True
End If
とかどう?
855:デフォルトの名無しさん
21/03/08 11:59:04.12 ub+dBY/l0.net
>>848
何でセーブする前にEXCELのアプリケーション閉じようとしてるの?
856:848
21/03/08 12:04:00.24 TrYviUKj0.net
>>851
>>852
ダメでした。
ほかのファイルでは問題なくExcelが終了するのですが
Private Sub Workbook_BeforeClose(Cancel As Boolean)
を使うマクロのときだけ、閉じなくなるような気がします。関係ありますかね?
857:デフォルトの名無しさん
21/03/08 12:23:48.80 Qtlmv4rK0.net
>>853
858:デフォルトの名無しさん
21/03/08 12:30:21.22 ub+dBY/l0.net
わざわざセーブメッセージ叩き潰して
ブック捕まえたまんまにして
アプリケーション閉じようとしてるんだから
わざと閉じられないようにしているようにしか見えない
859:デフォルトの名無しさん
21/03/08 12:44:18.76 Qtlmv4rK0.net
savechangesでも無限ループしてそう
860:デフォルトの名無しさん
21/03/08 12:56:18.62 vFSNvomr0.net
>>854
BeforeCloseにApplication.Quit記述してイミディエイトからThisWorkbook.Closeを実行してみたけど問題なく閉じたから何か別の物が干渉してる可能性があるかなぁ
861:デフォルトの名無しさん
21/03/08 13:04:41.43 9xs5g46P0.net
めっちゃ古いバージョンとかじゃないだろうな
862:848
21/03/08 13:32:58.59 TrYviUKj0.net
>>855
当初はこれでしたが、ググったら、Application.Quitを上に書くらしいです
ThisWorkbook.Close savechanges:=True
Application.Quit
>>856
Application.Quit
ThisWorkbook.Close savechanges:=True
だけでも同じでした
>>857
他に保存する方法を教えてください
>>858
自分でも試してみましたが、確かにちゃんと閉じますね。他の干渉を疑ってみます。
>>859
2019です
863:デフォルトの名無しさん
21/03/08 13:49:36.30 9xs5g46P0.net
Application.EnableEvents = true
を頭に付けてみるとか
864:デフォルトの名無しさん
21/03/08 18:00:51.59 +0kCYoNG0.net
そこでやるべきことは ThisWorkbook.Save だけだと思うんだが
865:デフォルトの名無しさん
21/03/08 18:30:55.70 bSh0ioyn0.net
コマンドプロンプトでtaskkill /f /im excel.exe
866:デフォルトの名無しさん
21/03/08 19:53:15.72 Awv++sSE0.net
Quitは最後では
変なExcelプロセスが残ってないか確認した方がいいのでは
867:デフォルトの名無しさん
21/03/08 21:03:57.98 53ng3r6C0.net
VBEでVBAを使って出来たものがマクロであってる?
本屋にVBAの本とマクロの本があるけど同じことと思っておk?
868:デフォルトの名無しさん
21/03/08 21:12:54.65 ub+dBY/l0.net
>>865
半分正解
869:デフォルトの名無しさん
21/03/08 21:17:42.97 ub+dBY/l0.net
「VBEで作ったものはマクロ」
これは合ってる
「VBAとマクロは同じことを言っている」
マクロにはVBAtで作られたもの以外に
4.0マクロと言うものが有ってだな・・・
まぁ、あまり気にしなくても良いかもしんないけど
870:デフォルトの名無しさん
21/03/08 21:34:20.02 B96zl28N0.net
マクロ
スクリプト
関数
これらはプログラムのひとかたまり
厳密に区別しずらいけどそれぞれ
ニュアンスの違いはある
871:デフォルトの名無しさん
21/03/08 21:58:36.85 U/cFdqiVM.net
>>865
VBEはエディタ。Excelの場合はVBAとマクロは同じ意味で使われる。ExcelマクロがExcel VBAのコードで表現されるため。
872:デフォルトの名無しさん
21/03/08 22:10:13.99 Awv++sSE0.net
>>867
なんかいろいろ違うぞ
873:デフォルトの名無しさん
21/03/08 22:16:46.29 Dj6nESKZ0.net
関数は全然違うだろwww
874:デフォルトの名無しさん
21/03/08 22:42:26.89 53ng3r6C0.net
>>866
まだ表紙なのに理解半分かw
>>867
4.0マクロネットで見て使ったこと1回だけあるけど関数みたいなやつだった記憶。
>>868
スクリプトも便利そうですよね。
デスクトップかっこ良くするフリーソフトに自由にスクリプト使えますって書いてあって挫折した。。
>>869
出来たもんがマクロでVBAが設計図でVBEが紙と鉛筆か。
みんなありがと、ネットにも解説サイトあるけど違うとこ見ちゃうから本買ってくるわ。ノシ
875:デフォルトの名無しさん
21/03/08 23:14:12.98 u4CRr3CF0.net
そういえばvbaをjsで書ける世界まだなんだっけ?
gasみたいな感じで書けないかな
876:デフォルトの名無しさん
21/03/08 23:18:26.32 hUWITx/G0.net
WScriptのJScriptでExcel使えるだろ
877:デフォルトの名無しさん
21/03/09 00:19:47.43 fLnH8jKyM.net
>>873
>>834
878:デフォルトの名無しさん
21/03/09 02:53:50.15 uNAjD4zcH.net
微妙に違う気がするなあ
VBAはプログラミング言語の名前(の略称)。単語と文法が書いてあるだけの辞書みたいなもん
その言語で書かれた物がマクロで、むしろ設計図はこっちが近い
VBEはマクロの作成を手助けするツール、紙と鉛筆って考え方はだいたい合ってる
で、マクロの中でも結果を一組だけ呼び出し元に返すように作られてるのが関数
879:デフォルトの名無しさん
21/03/09 05:15:21.29 suvlK62N0.net
機能とワークシート関数とか全くわからん
操作なんてVBAで良いじゃん
周りでもそういった人いるしさ
880:デフォルトの名無しさん
21/03/09 08:22:35.06 zXQo4RJq0.net
本来、Excelの操作の自動化を目的にしたVBAマクロなのに元の機能そのものが全く分からんとか本末転倒にも程がある
881:デフォルトの名無しさん
21/03/09 10:45:46.13 pnwu5thka.net
作成依頼です
一定範囲内において、選択されたセルすべてに、書式設定で取り消し線を付けたいです
たとえば、D5からD20の範囲内で、そこ以外の範囲が選択されていた場合はエラーを返す
範囲内なら、選択されたセル(単一、複数、飛び石あり)すべてに、一括で取り消し線を追加
というような感じです
飛び石状態で複数が選択された場合に、上手く処理できなくて相談させていただきました
よろしくお願い致します
882:デフォルトの名無しさん
21/03/09 11:04:35.36 oV9GYLDS0.net
>>879
そんな仕様のものを作ってはいけない
883:デフォルトの名無しさん
21/03/09 11:21:48.31 Nc9tdWjH0.net
>>879
選択範囲をまとめて見るんじゃなくて、選択されたセル一つ一つについて既定の範囲内にあるか条件判断をし、エラーかそうでないか
エラーでなく全てのセルが範囲内なら一つ一つのセルに取り消し線を追加
とすれば普通にできるでしょ
横着しようとしてるからいけないんじゃないの
884:デフォルトの名無しさん
21/03/09 11:25:30.81 uNAjD4zcH.net
VBEは赤ペン先生?全部じゃないけど間違いをすぐ教えてくれる
885:デフォルトの名無しさん
21/03/09 11:58:31.47 zYh1VL3E0.net
>>879
お金ください
886:デフォルトの名無しさん
21/03/09 12:03:56.11 uNAjD4zcH.net
>>879
For Eachでセルを1個ずつ処理するんだよ
For Each、セルアドレスチェック、1つでもD5-D20じゃなかったらエラー
エラーがなかったらもう一度For Each、各セルに取り消し線
みたいな流れ
887:デフォルトの名無しさん
21/03/09 12:09:52.12 4S2gbixUa.net
ピボットグラフのスライサー内の選択を変えた時にマクロが動くようにしたいです
イメージ的にはワークシートイベントです
例︰スライサーの日付を変更時にグラフの色を塗る
選択変更の検知方法を教えてください
よろしくお願いします
888:デフォルトの名無しさん
21/03/09 12:25:42.94 t7O7P6i9M.net
外枠なら面倒だけど取り消し線なら簡単だ
889:デフォルトの名無しさん
21/03/09 12:38:26.95 uNAjD4zcH.net
外枠でも大差ないと思う
Selectionの上下左右に罫線を引くだけ
890:デフォルトの名無しさん
21/03/09 12:43:13.10 pnwu5thka.net
>>881
>>884
なるほど、これなら自分でできそうです
ありがとうございました
891:デフォルトの名無しさん
21/03/09 13:03:57.82 C5e26MY+0.net
いえいえ、自分でもっと勉強してくださいね
892:デフォルトの名無しさん
21/03/09 16:16:21.91 1va3W7Si0.net
>>879
If Intersect(Selection, Range("D5:D20")).Count <> Selection.Count Then
MsgBox "エラー"
Else
Selection.Font.Strikethrough = True
End If
893:デフォルトの名無しさん
21/03/10 00:11:15.88 seJ5KfaI0.net
だってさ、先輩がExcelなんか全部マクロで動かせば良いって言われたからさ。。。
ワークシートの関数とかそんなもん覚えなくて良いと言われたからさ。
だからVBAしか知らない。
今凄く関数とか機能を覚えるために苦労してる。
894:デフォルトの名無しさん
21/03/10 02:20:07.32 Mh5oeh7J0.net
>>891
無理してやる必要ないのに、何のために覚えるの?
895:デフォルトの名無しさん
21/03/10 07:58:05.94 seJ5KfaI0.net
>>892
マクロだけでは遠回りだと気づいて
896:デフォルトの名無しさん
21/03/10 08:18:24.93 afuwFvM40.net
vlookupはなんであんな変なインターフェースなんですか
897:デフォルトの名無しさん
21/03/10 09:29:52.26 AjUIRLk9M.net
ポーカーフェイスですよ
898:デフォルトの名無しさん
21/03/10 10:14:53.26 B52MA1yl0.net
>>894
古いから
899:デフォルトの名無しさん
21/03/10 14:59:19.94 hxdj8Ixba.net
screenupdapingを非表示にした状態でcalculationを自動にしたら、ちゃんと計算やってくれますか?
900:デフォルトの名無しさん
21/03/10 15:30:04.25 PHH+vFRc0.net
>>897
自分でやってみりゃいいじゃん
901:デフォルトの名無しさん
21/03/10 15:39:38.02 hxdj8Ixba.net
>>898
updatingが表示になったときに計算されるのか、非表示中に計算されてるのかがわからないのです。
902:デフォルトの名無しさん
21/03/10 15:43:34.11 TvaGnuXK0.net
ExcelからVBAが完全になくなるより先にMSが先になくなりそうじゃない?
903:デフォルトの名無しさん
21/03/10 15:57:24.48 kPBSipVT0.net
MSがなくなるより先にお前がなくなるんじゃない
904:デフォルトの名無しさん
21/03/10 17:04:34.10 ij0IDF+ed.net
その前にIT途上企業のウチの会社がなくなるな
905:デフォルトの名無しさん
21/03/10 17:25:36.32 PHH+vFRc0.net
>>899
対象セルのvalue値を処理中に
debug.printで書き出すなり
どこかのセルに突っ込むなり
トレースして確認するなりすればいいじゃん
まず聞く前にググる癖をつけないと
いつまで経っても誰かに聞かないと
何も出来なくなるよ
906:デフォルトの名無しさん
21/03/10 17:37:30.93 hxdj8Ixba.net
>>903
わかりました。てか式の値見ればすぐわかりますね。やってみます
907:デフォルトの名無しさん
21/03/10 18:13:57.59 osSCK/tE0.net
今日水曜日なのにweekdayName(weekday(Date))で木曜日と出るのは仕様?
Dateは2021/03/10
weekday(Date)は4
と出ることは確認済み
weekdayとweekdayNameで週始めを日曜とするか月曜とするかで差が出てるんだろうからweekdaynameをvbSundayにすることで解決はするけど、何かが原因でここに違いが出てるなら修正したいので仕様かどうか知りたい
908:デフォルトの名無しさん
21/03/10 19:31:18.15 WhcyA+8r0.net
仕様ではない
909:デフォルトの名無しさん
21/03/10 19:41:43.99 iMortp6N0.net
Weekdayの規定値がvbSundayで、WeekdayNameの規定値がvbUseSystemDayOfWeek。
どっちかに合わせた方がいいと思う。
910:デフォルトの名無しさん
21/03/10 20:15:11.47 FQxPGFWfa.net
やっぱり>>885の方法はないですかね
諦めてマクロボタンで更新します
ありがとうございました
911:デフォルトの名無しさん
21/03/11 16:08:09.65 2F7MZ2cN0.net
>>907
なるほど、自分のwindowsカレンダーの開始日が月曜になってるからなのか
なんで既定値が違うんだろうという疑問は残りつつも納得、ありがとうございました
912:デフォルトの名無しさん
21/03/12 14:18:56.93 cUuyzc0G0.net
VBA学ぶのにお勧めの本ありますか?
913:デフォルトの名無しさん
21/03/12 14:22:39.95 b9Kr93A50.net
>>910
MOSの本
914:デフォルトの名無しさん
21/03/12 14:25:27.81 b9Kr93A50.net
正確にはVBAエキスパートか。
見過されがちだけど、試験対策本は非常によくまとまっている。
915:デフォルトの名無しさん
21/03/12 17:44:33.68 UcsTGFzQM.net
買う前に周辺の図書館を回れば、vba本が見つかるかもしれない
916:デフォルトの名無しさん
21/03/12 19:23:46.81 7Crflr6rM.net
金額の話なのか?
917:デフォルトの名無しさん
21/03/12 19:31:10.39 f8Q6HjqoM.net
650頁を超える「Excel VBA逆引き辞典パーフェクト」を最初から通して読む
918:デフォルトの名無しさん
21/03/12 23:07:31.55 NBdc6r9a0.net
VBの、何かあの電話帳より分厚いの有るじゃん
叩かれると85ポイントくらいダメージを受けそうな感じのアレ
マジレスすると、あれで勉強したわ
919:デフォルトの名無しさん
21/03/12 23:38:50.44 sGQx1lBf0.net
>>894
XLookupを使いなさい
920:デフォルトの名無しさん
21/03/13 02:37:38.41 5xXr3I9d0.net
まじレスすると他人のおすすめの本は買っただけで満足して読まない可能性が高い
921:デフォルトの名無しさん
21/03/13 07:57:23.36 slDJWJ280.net
>>910
出来るだけ薄い奴がいいよ
少なくとも一週間で読み切れそうな奴
細かい部分は結局ググる事になるから手っ取り早く基礎だけ学べるのがいい
プログラミングの勉強は書き方を学ぶというより、
「ググる方法、ググって出てきた内容を理解できる最低限の知識」を身に着ける方に重きを置いた方がいい
922:デフォルトの名無しさん
21/03/13 08:14:07.47 csBuBYNL0.net
>>910
現在の知識レベルによって薦める本は変わってくるけどなーんも知らないと言うのならVBAの絵本でいいんじゃなかろか
>>919の人も言ってるけど基本、ネットで調べることになるんでどちらかというと
自分が知りたいことを調べられる単語をすぐに思い浮かべる力と
それを理解する力の方が自分的には重要な気がする
後、理解出来なければ取り敢えず書いてみてこねくり回すことも大事
本当に基本的なことさえ分かっていれば、
その内クラスやAPI、コールバックとかにぶつかることがあってもネットで調べることが出来れば
自分が然るべき理解力をつけた際に理解出来るようになる。
923:デフォルトの名無しさん
21/03/13 08:17:01.13 tBGlpruK0.net
メルカリなどでたくさん買って、好きなのを使えばいいよ。
924:デフォルトの名無しさん
21/03/13 11:51:20.74 9LAtgmD40.net
>>910
VBAの神様
925:デフォルトの名無しさん
21/03/13 14:55:26.89 4/YYKqK7F.net
Excel VBAは自己流が多いと思うけど、体系的に学習するならマイクロソフトのVBAエキスパート本だろうな。
926:デフォルトの名無しさん
21/03/13 21:38:13.19 99ipLDsT0.net
小手先のテクニックより
複雑怪奇なExcelの挙動の中身がどうなってんのか
詳細に説明してほしいわ
謎挙動がおおすぎる
927:デフォルトの名無しさん
21/03/13 21:57:08.91 7fDCnZwF0.net
具体的には?
928:デフォルトの名無しさん
21/03/13 22:05:26.89 tBGlpruK0.net
>>924
あまり使われていないVBAの機能を使うとすぐにバグにはまる。
929:デフォルトの名無しさん
21/03/13 22:07:49.91 tBGlpruK0.net
ActiveXのボタンが消えるバグなどは放置状態
930:デフォルトの名無しさん
21/03/14 01:08:53.96 EQ7/9AB00.net
vbの構文がダサすぎるのが嫌
綺麗に書いても汚らしく見える Dim asとかキモいんだよ
931:デフォルトの名無しさん
21/03/14 02:39:44.98 QAEhurjz0.net
VBAのコードのフォントを HGP行書体 (日本語) とかにしてみたら?
932:デフォルトの名無しさん
21/03/14 03:51:24.74 +mKOZ3nE0.net
ACCESSのレポートではかけたのですが
VBAで規定の先よりも細い線を書くことはできませんか?
933:デフォルトの名無しさん
21/03/15 06:39:33.91 6QvkQitw0.net
コントロールのボタンが押す度徐々に小さくなったり消えたり動き回ったり
配列返す関数をUboundに渡すとメモリリークしたり、
フォームをモーダル表示中にシートをアクティブにすると何故かシートを操作できたり、
インターフェースを実装するクラス自体をインターフェースに出来てしまう上に、それをするとバグったり、
いくらでも上げられるだろ
特にフィルタ関連は変なのが多い
specialcells(xlcelltypevisible)とかcopyメソッドとか
934:デフォルトの名無しさん
21/03/16 14:07:15.77 yEkj4Jws0.net
作成依頼なんですがお願いできますでしょうか
A列に数字(No.)
B列に文字列(名前)の3000行ほどの表があります。
A列の数字は重複している箇所があり、
A列が他の行と重複している場合B列の文字を全て繋げてC列に書き出したいのですが可能でしょうか。
サンプル
A列 B列 C列
11111 A子 A子
11112 B子 B子
11113 C子 C子・D子・E子
11113 D子 C子・D子・E子
11113 E子 C子・D子・E子
11114 F子 F子
11114 F子 F子
11115 E子 E子
ただし、サンプルのように
A列が重複してもB列の文字列が同じだった場合は『F子・F子』とならずに『F子』のままで、
重複しないA子、B子もそのままにしたいのです。
Aが列の数字は最大で20ほど重複している場合があります。
ずっと手作業でやってて挫けそうなんでお願いします!!
935:デフォルトの名無しさん
21/03/16 14:24:36.41 gGJzxP62H.net
>>932
Sub Macro1()
rr = Cells(Rows.Count, 1).End(xlUp).Row
For i = 1 To rr
n = Cells(i, 1)
936: s = Cells(i, 2) t = s & "・" For j = 1 To i - 1 If Cells(j, 1) = n Then w = Cells(j, 2) If InStr(t, w) = 0 Then t = t & w & "・" End If End If Next t = t & s & "・" For j = i + 1 To rr If Cells(j, 1) = n Then w = Cells(j, 2) If InStr(t, w) = 0 Then t = t & w & "・" End If End If Next t = Left(t, Len(t) - 1) t = Right(t, Len(t) - 1 - Len(s)) Cells(i, 3) = t Next End Sub
937:デフォルトの名無しさん
21/03/16 15:29:08.70 yEkj4Jws0.net
>>933
どひゃ~!!!!
しゅ、しゅごいぃいいい!
ありがとうございます!ありがとうございます!本当にありがとう!
938:デフォルトの名無しさん
21/03/16 15:59:46.67 cZC9o7Y5M.net
それ、例えば百合さんと百合子さんがいた時にバグらない?
こういうのは辞書に登録してitemsプロパティをjoin関数に渡すのが鉄板だと思う
最近ならvba使わずにfilter関数とunique関数でも同じことできるから、もしかしたらこっちの方が楽かも
939:デフォルトの名無しさん
21/03/16 15:59:47.11 btbyDUmHr.net
>>933
きったねえソースだなおい
940:デフォルトの名無しさん
21/03/16 16:01:05.39 YCs8uHit0.net
お、きれいなソース期待かw
941:デフォルトの名無しさん
21/03/16 16:15:55.00 gGJzxP62H.net
百合・百合子バグ修正
Sub Macro1()
rr = Cells(Rows.Count, 1).End(xlUp).Row
For r = 1 To rr
n = Cells(r, 1)
s = Cells(r, 2)
t = "・" & s & "・"
For i = 1 To r - 1
If Cells(i, 1) = n Then
w = Cells(i, 2)
If InStr(t, "・" & w & "・") = 0 Then
t = t & w & "・"
End If
End If
Next
t = t & s & "・"
For i = r + 1 To rr
If Cells(i, 1) = n Then
w = Cells(i, 2)
If InStr(t, "・" & w & "・") = 0 Then
t = t & w & "・"
End If
End If
Next
t = Left(t, Len(t) - 1)
t = Right(t, Len(t) - Len(s) - 2)
Cells(r, 3) = t
Next
End Sub
942:デフォルトの名無しさん
21/03/16 16:53:04.48 cZC9o7Y5M.net
百合さんと百合・D・ルフィさんがいた時にバグる
943:デフォルトの名無しさん
21/03/16 17:22:11.94 gGJzxP62H.net
百合・D・ルフィバグ修正
Sub Macro2()
Dim d As Object
Set d = CreateObject("Scripting.Dictionary")
rr = Cells(Rows.Count, 1).End(xlUp).Row
For r = 1 To rr
For i = 1 To rr
If Cells(i, 1) = Cells(r, 1) Then
s = Cells(i, 2)
If Not d.exists(s) Then d.Add (s), 0
End If
Next
Cells(r, 3) = Join(d.keys, "・")
d.RemoveAll
Next
End Sub
944:デフォルトの名無しさん
21/03/16 17:31:00.58 tUVUKdZi0.net
>>932
Ruby で、CSV ファイルでやってみた
require 'csv'
tmp_hash = { }
result_ary = CSV.read( "input.csv" ) # 2次元配列
result_ary.each do | row | # 1行ずつ処理する
if tmp_hash.has_key? row[ 0 ] # 既に、その数字が存在すれば
# 文字列が存在しない時だけ、その文字列を追加する
tmp_hash[ row[ 0 ] ][ row[ 1 ] ] = true unless
tmp_hash[ row[ 0 ] ].has_key? row[ 1 ]
else
tmp_hash[ row[ 0 ] ] = { row[ 1 ] => true }
end
end
# p tmp_hash
# {"11111"=>{"A子"=>true}, "11112"=>{"B子"=>true},
# "11113"=>{"C子"=>true, "D子"=>true, "E子"=>true},
# "11114"=>{"F子"=>true}, "11115"=>{"E子"=>true}}
result_ary.each do | row | # 1行ずつ処理する
# その行の3列目に、キーを結合した文字列を追加する
row.push tmp_hash[ row[ 0 ] ].keys.join( "・" )
end
csv_str = result_ary.map( &:to_csv ).join # 2次元配列を、CSV 文字列に変換する
print csv_str
945:デフォルトの名無しさん
21/03/16 17:41:01.13 QPeaG/4LM.net
何故突然にRuby?
946:932
21/03/16 18:32:29.43 yEkj4Jws0.net
>>940
度々ありがとうございます!
最初ヤツでも今の所大丈夫そうでしたが、今後はこちらを使わせていただきます!
他の方もありがとうございます!
947:デフォルトの名無しさん
21/03/16 19:02:04.81 EUyNpk5n0.net
>>942
rubyスレだと相手にもされないからわざわざ違うスレに来てるかわいそうな人だよ
948:デフォルトの名無しさん
21/03/16 21:06:28.11 8Gn4pDRu0.net
名前の例が○子とは、そうとうなジイさんだなw
949:デフォルトの名無しさん
21/03/16 21:12:32.28 gGJzxP62H.net
>>945
現代だとどう書くの?
ランキングによると結が人気あるらしいから結A、結B、結Cか
950:デフォルトの名無しさん
21/03/16 21:15:14.58 lullOsMB0.net
そら「百合(ろーず)」よ
951:デフォルトの名無しさん
21/03/16 21:28:58.74 8Gn4pDRu0.net
>>946
なんで女なのか?
952:デフォルトの名無しさん
21/03/16 21:42:16.30 gGJzxP62H.net
そんなこと言ったら、なぜ日本人なのか、なぜ人類なのか
953:デフォルトの名無しさん
21/03/16 21:51:49.14 8Gn4pDRu0.net
太郎、次郎、三郎、四郎、五郎でいいだろ。
954:デフォルトの名無しさん
21/03/16 21:55:45.14 YCs8uHit0.net
なんで男なのか?
955:デフォルトの名無しさん
21/03/16 22:05:23.00 gGJzxP62H.net
3000行もあるのに、それじゃ考えるのが大変だ
956:デフォルトの名無しさん
21/03/16 23:39:47.76 FDp5iKWO0.net
手作業でAからFカップを調べる作業にVBA使うとか
お前ら男として終わってるわマジで
957:デフォルトの名無しさん
21/03/17 00:14:55.79 8Ujh9QFC0.net
ろーずって薔薇じゃないの?
958:デフォルトの名無しさん
21/03/17 00:20:54.29 lKwA7qQn0.net
そうだよ
959:デフォルトの名無しさん
21/03/17 00:54:57.81 KXbC8pO1H.net
わざと間違えるっていう2chから続く伝統芸
URLリンク(i.imgur.com)
960:デフォルトの名無しさん
21/03/17 02:44:52.10 LQZUutD10.net
>>933
いきなりCellsで始まるのはいただけないなw
できればブックから始める習慣を付けて欲しい。
961:デフォルトの名無しさん
21/03/17 03:45:50.60 KXbC8pO1H.net
>>957 なおした
Option Explicit
Sub VBA69_932()
Dim A_number As Long, B_name As String, C_list As Object
Dim last_row As Long, row_loop As Long, search_loop As Long
Set C_list = CreateObject("Scripting.Dictionary")
With ThisWorkbook.ActiveSheet
last_row = .Range("A" & Rows.Count).End(xlUp).Row
For row_loop = 1 To last_row
C_list.RemoveAll
A_number = .Range("A" & row_loop)
For search_loop = 1 To last_row
If .Range("A" & search_loop) = A_number Then
B_name = .Range("B" & search_loop)
If Not C_list.exists(B_name) Then
C_list.Add (B_name), 0
End If
End If
Next
.Range("C" & row_loop) = Join(C_list.keys, "・")
Next
End With
End Sub
962:デフォルトの名無しさん
21/03/17 10:07:11.87 wJCP0FMq0.net
>>933
謎の変数名を多用するのやめてくれ。見る気が一瞬で失せる。
ネスト深くするのも罪悪感感じてくれ
963:デフォルトの名無しさん
21/03/17 10:20:01.36 QeKL1gNm0.net
配列でやれ
964:デフォルトの名無しさん
21/03/17 10:38:31.95 CnU6DmD/0.net
はい
965:デフォルトの名無しさん
21/03/17 10:48:27.37 AkcuhhXSr.net
れつ
966:デフォルトの名無しさん
21/03/17 10:49:53.05 rwSgtXuJ0.net
ゴー
967:デフォルトの名無しさん
21/03/17 10:52:25.95 KXbC8pO1H.net
>>960 なおした
Option Explicit
Sub VBA69_932_a()
Dim This As Worksheet
Dim table() As Variant
Dim A_number As Long, B_name As String, C_list As Object
Dim last_row As Long, row_loop As Long, search_loop As Long
Set C_list = CreateObject("Scripting.Dictionary")
Set This = ThisWorkbook.ActiveSheet
last_row = This.Range("A" & Rows.Count).End(xlUp).Row
ReDim table(last_row - 1, 2)
table = This.Range("A1:C" & last_row)
For row_loop = 1 To last_row
A_number = table(row_loop, 1)
C_list.RemoveAll
For search_loop = 1 To last_row
If table(search_loop, 1) = A_number Then
B_name = table(search_loop, 2)
If Not C_list.exists(B_name) Then
C_list.Add (B_name), 0
End If
End If
Next
table(row_loop, 3) = Join(C_list.keys, "・")
Next
This.Range("A1:C" & last_row) = table
End Sub
968:デフォルトの名無しさん
21/03/17 10:59:16.82 AkcuhhXSr.net
変数にABCなんてのを使ってる時点でセンスゼロ
後で見て全くわからないバグの温床にしかならない
969:デフォルトの名無しさん
21/03/17 11:12:33.58 QeKL1gNm0.net
LBound UBound使えよ
970:デフォルトの名無しさん
21/03/17 11:56:37.23 KXbC8pO1H.net
>>965
お手本見せて
>>966
データ数は変数に入れたから改めて調べる必要ないという判断
971:デフォルトの名無しさん
21/03/17 12:13:35.08 YH/YYkmR0.net
クソコード
972:デフォルトの名無しさん
21/03/17 12:27:17.82 rAxKrtcHF.net
うんコード
973:デフォルトの名無しさん
21/03/17 13:20:25.46 4HdAS7ns0.net
変数名に対する識者の見解
スレリンク(bsoft板:253番)n
974:デフォルトの名無しさん
21/03/17 14:37:09.94 rwSgtXuJ0.net
口だけで何もしない(できない)奴はスルーでいいよ
975:デフォルトの名無しさん
21/03/17 15:25:09.30 vF0LuwhE0.net
>>964
うーん
頭ごなしに糞というつもりはないけど
そうだね、もし改善点を挙げるとすれば・・・
まぁ聞き流して良いけどね。
・変数名は一貫性を持たせて、一見して何を意味しているのか分かるようにすること。
例えば頭の1文字が大文字だったり小文字しているのをキャメル形式に統一するとか。
・ActiveSheetは極力使わない。
キチンとした意味を持っているならそれでいいけど、フォームやツールバーから呼ばれることやそのように改修される可能性も考慮してどのシートを使うか明示的に指定する方が良い。
もちろんその際はシート名が変更されてしまうことを考慮して
シート名ではなくシートオブジェクト名を使用する。
・単一責任原則を踏襲する。
一つの関数またはメソッドに、一つの役割のみ持たせて一つの関数またはメソッドが増長になることを防ぐ。
とは言ってもこれは何を一つの役割とするかを決めるセンスが必要で、
これを上手く作れれば「糞」からひとつ脱却出来る。
後は趣味の問題だけど
・Withを使わないことに慣れる。
VBA → VB.Net → C#に移行したとき、Withが無いから慣れておくとちょっと楽。
・CreateObjectは使い所を考える。
CreateObjectはバージョンを考慮せずに済んだりする反面、
メソッドやプロパティのインテリセンスが効かなくなるため、タイプミスをし易くなるという欠点がある。
参照で繋ぐか、CreateObjectで作成するかは
一考した方が良い。
尚、本来Variant型は何でも入ってしまう危険な型なので
使わない方がいいと言いたいところだけど
EXCELのRangeオブジェクトとあまりに相性が良いから使うなとは言えない。
976:デフォルトの名無しさん
21/03/17 16:55:51.25 ttYMdvTCd.net
ワロタ
977:デフォルトの名無しさん
21/03/17 19:15:40.71 2RS2aA5zM.net
メガネをクイってしながら凄い早口で言ってそう
978:デフォルトの名無しさん
21/03/17 19:24:46.18 lGPcjQzL0.net
>>967
940が一番何をしてるのか分かりやすい
これにシート銘柄をしっかり記述すればよいのでは?
979:デフォルトの名無しさん
21/03/17 19:25:19.68 lGPcjQzL0.net
銘柄w
シート名ね
980:デフォルトの名無しさん
21/03/17 19:38:30.30 vF0LuwhE0.net
>>964
ついでにもう一つ言っておくと、
ディクショナリやコレクションの要素数は1バイトで扱える数、つまり1から数えて256まで。
着眼点は良かったけど、3000行を考慮すると
オーバーフローで落ちる可能性があるよ。
981:デフォルトの名無しさん
21/03/17 19:56:32.92 lKwA7qQn0.net
>>956
ちがう
金星(まぁず)ちゃんというDQNネームがあった
982:デフォルトの名無しさん
21/03/17 19:57:39.75 lGPcjQzL0.net
ディクショナリは重複確認用で3000データをまるまる格納する訳じゃないだろ
983:デフォルトの名無しさん
21/03/17 20:01:06.73 cHLiD5SO0.net
>>977
>ディクショナリやコレクションの要素数は1バイトで扱える数、つまり1から数えて256まで。
初耳
984:デフォルトの名無しさん
21/03/17 20:20:25.27 lKwA7qQn0.net
>>977
嘘を言うな
985:デフォルトの名無しさん
21/03/17 21:15:41.95 X8ZT7dpP0.net
256ページの辞書なんて存在するの?
986:デフォルトの名無しさん
21/03/17 21:56:14.59 2ghuU9if0.net
ウィンドウ上の制限
987:デフォルトの名無しさん
21/03/17 23:33:51.91 YH/YYkmR0.net
経験からくる誤った思い込みだろうね。
1バイト単位の区切りというのは、8ビットパソコン時代からExcelが存在していれば、可能性としてあるが、16ビットパソコンから作っているのに1バイトという制限はありえない。
988:デフォルトの名無しさん
21/03/17 23:42:58.65 n+mEYgox0.net
ディクショナリとかコレクションとかが、具体的に何を指してるかにもよるんだが
まあ255個とかいう制限のディクショナリやコレクションは思いつかないが
EXCELに限れば、上限255とか256とかいう制限のものは今ですらちょこちょこあるんだぜ
URLリンク(support.microsoft.com)
989:デフォルトの名無しさん
21/03/18 00:01:49.93 7fQvPjcg0.net
>>985
論点ずらしだな。単純に初期のExcelの時代だとメモリ節約で1バイトにしただけで、足りないと判断されたものは、のちに2バイト、4バイト単位に変更されている。
990:デフォルトの名無しさん
21/03/18 00:28:15.06 POZoiR5o0.net
改善点とか言って挙げてる内容は偏ってて微妙だし知識も無いのに態度だけ上からだし昔の人はすごいなぁ
991:デフォルトの名無しさん
21/03/18 02:36:30.62 Z7yNcrmt0.net
>>985
例えば列の幅が255文字なのは別に1バイトで管理してるわけじゃなくて上限を設定してるだけだろ
そう言うのはExcelに限った話じゃないよ
992:941
21/03/18 13:11:04.06 VjRMlHUp0.net
>>941
11111,A子
11112,B子
Ruby で、こういうCSV ファイルを処理した場合、
辞書は、こうなる。
値のtrue に意味はない
{"11111"=>{"A子"=>true}, "11112"=>{"B子"=>true},
"11113"=>{"C子"=>true, "D子"=>true, "E子"=>true},
"11114"=>{"F子"=>true}, "11115"=>{"E子"=>true}}
F子は、重複しない
993:941
21/03/18 13:17:05.45 VjRMlHUp0.net
ただし、このファイルを、1パスでは処理できない
11113,C子
11113,D子
11113,E子
"11113"=>{"C子"=>true, "D子"=>true, "E子"=>true},
C子 を読み込んだ時点で、その行よりも後ろにある、
D子・E子 の情報を取得できないから
だから、>>941
では、データ配列を2回読んでいる
994:デフォルトの名無しさん
21/03/18 13:36:31.16 pzBF2kYz0.net
>>964
64bit版の時はlonglongで宣言するようにしないとエラーになる可能性があるよ
995:デフォルトの名無しさん
21/03/18 14:11:19.12 Z7yNcrmt0.net
>>991
3,000行ぐらいなのに?
996:デフォルトの名無しさん
21/03/18 14:55:42.20 pzBF2kYz0.net
そんな考えならプログラミングやめたほうが良いんじゃない
997:デフォルトの名無しさん
21/03/18 15:38:13.36 Z7yNcrmt0.net
何でもかんでもLongLong使うのが正解だとでも思ってるの?
998:デフォルトの名無しさん
21/03/18 15:58:28.07 7fQvPjcg0.net
>>993 はデタラメを言っているな。妄想なのかな。
999:デフォルトの名無しさん
21/03/18 16:01:58.30 7fQvPjcg0.net
他の言語や環境の仕様とごっちゃになってるんだろうな。
Excel VBAで32ビットと64ビットで、よく使われるデータ型に大きい違いがあるなんて聞いたことがない。
1000:デフォルトの名無しさん
21/03/18 17:13:11.58 Z7yNcrmt0.net
LongLong は 64bit 環境でないとサポートされないとか LongPtr のビットサイズやバリアント型の文字列の付加サイズが 32bit と 64bit 環境で違うとかはあるけどまあ些細といえば些細な話だわな
そもそも現状最大行数が Long 型で扱えるのに >>991 が何を心配してるのか興味ある
1001:デフォルトの名無しさん
21/03/18 17:39:14.84 7fQvPjcg0.net
64ビットというのも何の組み合わせを言っているのかもわからない。
それにしてもここはマイクロソフトのサポートの人がいないか?
この中途半端さが日本マイクロソフト風なんだが。
1002:デフォルトの名無しさん
21/03/18 18:16:57.50 d7pvjDlRM.net
サポートの人が256個なんて言わないだろ
1003:デフォルトの名無しさん
21/03/18 19:19:46.38 Z7yNcrmt0.net
組み合わせ?
単に64bit Excelかどうかだけじゃね?
1004:1001
Over 1000 Thread.net
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 95日 18時間 57分 23秒
1005:過去ログ ★
[過去ログ]
■ このスレッドは過去ログ倉庫に格納されています