Excel VBA 質問スレ Part55
■ このスレッドは過去ログ倉庫に格納されています
ExcelのVBAに関する質問スレです コード書き込みや作成依頼もOK ※前スレ Excel VBA 質問スレ Part54 https://mevius.5ch.net/test/read.cgi/tech/1527334657/ >>1 すれ立て乙 そして前スレ976のリストビューがずれる現象は splitしてる結果を比較してみろとエスパー ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 以下、知ったかぶりがVBAにマウントをとる長文と VBA老害が見当外れのレスをする長文をお楽しみください クラスモジュールの正しい使い方わからん コレクションとかディクショナリとかそれらにぶっこむ変数定義して関数かましてMEをぶっこんで行くのって使い方として正しいん? コレクションは標準側にもったり別のクラスに持つべき? >>5 そんな事が知りたい? オッケー じゃあそれもマクラーに解説させるわ 別に使わなくても良いよ。 コンストラクタ引数が使えないし、オーバーロードないしで読みづらくなるだけ。 oopになりきれてないんだよね 正しいかどうかは状況によるけど俺は何度も繰り返す処理を自作クラスにしておく程度かな vbaの文字列操作は遅いから自前でjavaのstringbuilderみたいなのつくったりとか マクラーがPSスレで大暴れしたけど反応薄くてワロタwww たしかにYahoo知恵遅れのPGカテ見てると なぜそれをVBAでやろうとする?て質問だらけでウンザリするな VisualStudioとか他の開発環境はダウンロードもインスコも面倒だで 慣れてる人から見れば簡単だろうけど、未経験者には敷居がかなり高い テキストファイルのコピー/マージ/分割、Webスクレイピングもどき に貧弱で重いコーディングしかできないVBAですか?という… せめてPowerShellもバッチも使えよという 意識してスクレイピングという言葉を使っていないんだろうけど、Web操作なら分かるがスクレイピングにPowerShellは向かない。 取ってきたデータをどうするんだよ。 取ってきて終わりで、それをExcelの絡まない他のシステムに渡すだけというなら分かるけどな。 でもそれだったらそもそもExcel関係ないから俺でもそうするかも。 でもその場合でもPowerShellじゃなくて別の言語にするかも知れない。 多分VB.NetかC#とかの方が有力だな。 PowerShellからExcel起動してデータを表示するようなの作ってきたらセンスが無いの一言で終わりだね。 それにユーザーの使い勝手より自分のコードの書きやすさを優先するような奴は使えない。 一緒に働いてたら、同じ動作するVBAのコードを提示して俺のが採用されるだろうな。 何でPS1とxlsxの2つのファイルを扱わなきゃならんと言われて。 もうおまえら好きなの使えよwwwNGワード登録めんどくせーんだよ ただここはExcel VBAスレだ ろくなパーサーもない、正規表現すら覚束ないVBAでスクレイピングとかマゾかよ PowerShell以上に向いないのに データ取り込んでVBA有利な作業したいって条件でも、 Excelからスクレイピングツール(psでもrbでもcsでもなんでもいい)呼び出すのが正解だろ 使い分けというの言葉を知らんのか ほんとマクラーは何でもかんでもVBAだけでやろうとするのが好きだな もしかしてそれしか出来ないのか? 標準入力すら素直に受け取れないVBAじゃ他のツール呼び出すの難しかったね ごめんね俺が間違ってた 全部VBAでやるのが正解だよ それしかできないもん >>17 >>18 それでもお前のコードは採用されない。 2ファイルになった時点で埋めようが無い差だ。 VBAで出来ないことなら別だがな。 VBAで標準入出力使うことはあまり無いなあ。 それで困ったことも無い。 そういう環境だと思うが。 powershellは起動するためにもう一工程要る PSなんて使う必要ないだろ PSこそ中途半端な機能だわ こんなの使うくらいならVSとかのIDEで良いよね vbaだと云々かんぬんはまぁ分からんでもないけどあーするといいこうしろよとか無くps勧めてくるのはありえんわ 知識そこで止まってる化石かなんかかよ 使いにくい言語を使い本来不要な問題を作り出す その問題を工夫して回避することが大事なんだ 便利なツールを手軽に作りたいだけの軟弱者は別の言語を使えばいい VBAを否定するつもりはないが固執する理由もない どの言語も向き不向きはあるしExcel周りはやっぱVBAが一番手軽で楽なんだよ ただ行番号くらいはデフォルトで設定設けろ VBA質問スレなんだからVBAに固執してくれよ 逆に固執したくないならこのスレに固執するなよ てかなんでVBA質問スレで最適言語談義が延々続いてるのかさっぱりわからない Colloctionに入ってる要素をランダムに並べ替えたいんですが どういうコード書けばよいですか? >>32 やりたいのはこういうこと? Key1 → Value1 Key2 → Value2 Key3 → Value3 ↓ Key1 → Value3 Key2 → Value1 Key3 → Value2 >>28 これってVBAの言語的な優位性というかランタイムがエクセルに乗っかってるからってだけだよね Pythonが乗っかったら急速に消え去りそう VBAでおまんま食ってる人達は怯えてるだろうね >>33 いえこういうことです >>32 やりたいのはこういうこと? Key1 → Value1 Key2 → Value2 Key3 → Value3 ↓ Key3→ Value3 Key1 → Value1 Key2 → Value2 collectionは順番って概念がないからあまり意味ないけど。。 目的次第だけど一度配列にぶっ込んで インデックス乱数で作ってその順でcollection作り直したら? inputboxにdefaultを設定すると選択状態になりますが、 これを選択しない状態にすることは可能でしょうか? >>37 VBAにはinputboxは無いし、text boxにはdefaultプロパティもないんだが、一体なんの話だ? >>34 いや、あのね... 与えられた環境でどうするかって話で、そんなの当たり前だろ。 VBAも同時に使えるなら消えないだろうし、pythonに置き換わってVBAが使えないならpython覚えるだけだろ。 >>35 もう1個Collection作ってランダムに入れれば良いんじゃね? >>34 VBAでおまんま食ってるPython未経験だけど Python移行を熱烈に希望します >>41 せめてそれくらいはしてほしいよな 理想はC#AだがVB.netAでもいいわ >>40 なるほど。 テストでこういうコードを「アホレ スイスイスーダララッタ スラスラスイスイスイ」と一瞬で作ったら一発で成功した。 あらためてオレは頭がいいな。 ------------------------------ Sub test() Dim i As Integer Dim r As Integer Dim c1 As Collection Dim c2 As Collection Dim c As Class1 Set c1 = New Collection Set c2 = New Collection For i = 1 To 100 Set c = New Class1 c.i = i c1.Add c Next i For i = 1 To 100 r = Int(Rnd * (100 - i + 1)) + 1 c2.Add c1(r) c1.Remove r Next i For i = 1 To 100 Debug.Print c2(i).i Next i End Sub ------------------------------ Class1 Public i As Integer ------------------------------ Vbaってコレクションのランダムソートごときにすごい行数を使うんだなあ驚いた 1、2、3、たくさん、すごい、って数える部族の人コンニチワ VBAもBASICの一種だから行番号は付けられるんだけどね Sub Foo() 10 Dim i As Integer 20 Debug.Print i 30 i = i + 1: GoTo 20 40 End Sub >>37 inputbox関数のことです 引数defaultに文字を入力した時、選択されないようにしたいのです Sub foo() bar = InputBox("", "", "選択されてしまう") baz = Application.InputBox("", "", "選択されてしまう") End Sub >>50 そうです、文字が選択されてしまいます フォームでも作るしかないみたいですね ただ、右キーで選択解除できるのは大きな収穫でした(endキー使っていました) ありがとうございました おれはテキストボックスにフォーカスが当たったらテキストが選択されてない方が嫌だけどな ダイアログボックスのUIに対するガイドラインみたいなのなかったかな また偏った知識で変なUIがVBによって作られてしまうのかと思うと忍びなくてな >>48 Integerオーバーフローまで無限ループw クラスインスタンスをJSONにシリアライズしたいのですがどうすればいいでしょうか クラスの種類が1000種類ぐらいあるので個別に作ると工数が足りません >>58 そうです エクセルVBAの使用以外の開発は全て禁止されています VBAでクラスを1,000種類? バカなのかネタなのかはっきりしてくれ w ならお前の工数見積もりのミスだな おとなしく謝って人員投入してもらえ そこをなんとか バカは承知なのですが他の選択肢は禁止されているんです 工夫でどうにかなりませんかね? 出来ませんって言えば? 実際出来ないんだし 正直に言えば済むだろ こんな簡単なことがVBAではできないのでしょうか? 出来る出来ないじゃなく 出来るけど工数がかかるだけだろ…馬鹿か? >>67 もしできるなら工数はほとんどかかりませんよ できないから工数がかかって大変なのでなんとか工夫してできませんか?という話をしてます 人にバカという前に自分の理解力の程度を自覚したほうが良いのでは? apiでメッセ送れば未選択状態に出来なかったかな? クラス定義はテキストだし、JSONもテキストだし、変換しようと思えばできるじゃない まさかそこの手法レベルで悩んでたの? クラス定義が1000種類もあり、変換定義を書く工数が足りないって話だとばかり思っていたよ… クラスのソースからコンバータ自動生成するプログラム作れば解決 つかクラス1000個とか、VBAに向いてないのを差し引いても、どう考えても設計間違ってるわ VBAではJSONシリアライズのようなちょっとした処理のためにVBAパーサーを書かなければならないんですか? 他の言語だと基本ライブラリを使って1行で出来る処理なのでにわかには信じられません 経験上、コード生成は資源管理や後々のメンテナンスでトラブルが発生することが多いのでできれば避けたいです VBAは工夫しだいで何でも出来る言語だと思います もっと工夫して実行時に解決することはできませんかね? >>72 小さいオフィスの事務作業ではどうか知りませんが1000クラスは業務システムでは少ない方ですよ 1つのシステムでプロジェクト(機能)が100以上、それぞれのプロジェクトに画面がいくつか、クラスが10〜、なんてことは別に珍しくもないです VBAはRuby、Python、.NETと比較されるほどの優れた高級言語なので 他の言語で当たり前のようにできることがまさか出来ないとは思いませんでした こんなことで見積もりを誤ったなんてまるで交通事故にでもあったような気分です 使った事ないけどリフレクションぐらいあるに決まってんだろwww それ使えば簡単に実装できるわ オブジェクトブラウザにクラス一覧やメソッド一覧が表示される という事はメタデータの取得方法が存在するって事だ 詳しい方法はいつもの達人VBAerが教えてくれるだろう >>76 >他の言語で当たり前のようにできることがまさか出来ないとは思いませんでした >こんなことで見積もりを誤ったなんてまるで交通事故にでもあったような気分です ただの無能じゃん。部下がこんなしょぼいミスしたらブチ切れるわ > VBAはRuby、Python、.NETと比較されるほどの優れた高級言語なので その認識からしておかしい、ネタだろ?w >>66 実際、貴方が出来ないんだから僕には無理でした って言えば?って事ですよ カッコ付けて安請け合いするから変な事になる >>79 あれは定義が見れるだけで 実際のインスタンスから値が取れることにはならん >>80 俺ならVBAに対する理解がこの程度の部下に 1000を超えるクラスが必要な規模のVBA案件見積させた上司にもブチ切れるわw >>85 それJSONをVBAで解析するやり方で、 クラスをJSONに出力する方法じゃないから >>86-87 あぁごめん、その続きの方貼ったつもりだったけど前のページ貼ってた 検証する気も起きないけど、ちょっとでも役に立てば バカは適材適所を知らないという見本のような質問だな。 俺の職場にバカがいなくて良かった。 シートからデータを抜き出して重複しないリストを作ろうとしています。 For If Cells(i+1,1) = .List(i) then 中略 Next で重複の判定をさせているのですが、エラーが出ます。 InStrで判定させると期待通りに動きます。 検索しているのは数字なのですが、エラーの原因がわかりません。 挙動としては問題ないので、ひとまず満足はしているのですが、もし原因エスパーして頂けるようなら教えてください。 このスレの質問らしいw エラーが出てるってだけでどんなエラーがどこで出てるのか言わない www >>91 今確認し直したらエラーが出ているのではなく、重複の判定ができていませんでした。 デバッグで変数を追っていましたが、表面上は同じ数字が入っているように見えるのですがifの中身を読みに行ってくれません。 例えば100〜110の数字を重複なしでリスト化したいのですが、 100 100 101… といった表示になってしまいます。 質問の仕方もわからないような有様で申し訳ありませんが、よろしくお願いします。 >>91 重複なしのリストは、フィルタをうまく使えば一瞬でできるぞ あと色々とめんどくさいから ・どういうリストを ・どうしたい を書いてくれ コードを書くから、それとどう違うかを照らし合わせると良い >>91 >検索しているのは数字なのですが まずこれがあやしい エクセルは表示されてる物と実際の値は違うぞ そもそもそのコードで重複除去できると思えんけどな 1重ループで重複除去できるアルゴリズムあるなら教えて欲しいわ >>94 納入日… 納入先1 納入先1' 製品名 納入額 納入先1 製品名1'' 製品名 納入額 納入先2 納入先2' 製品名 納入額 このような元データから納入先1と2をそれぞれリスト化してUserFormのリストボックス1と2に表示、そこから納入先のデータを引き渡して別途データまとめるものを作ろうとしてました。 納入先については数字で管理されています。 納入先1にはさらに細かくいくつかの納入先2があり、リストボックス1に納入先1のリストを表示、選択された納入先1に紐付いている納入先1'を表示させるのが目標です。 ExcelVBA逆引き辞典とネット参考に関係しそうなコードを自分で打っていくと上記のようなコードが出てきたので使ってました。重複除外のコードは本から流用してます。 よろしくお願いします。 >>96 なんとなくそこが原因だとは思うのですが、具体的にどうなっているのかわかりません。 cellsでは数値を返して、listでは文字列として見ているような理解でいいのでしょうか。 >>95 一行ずつ動かしてみましたが、cellsと.listの中身は同じ表示をするのにifの中に入ってもらえなかったのでどうなっているのかもわかりませんでした。 Dim d As New Dictionary(Of String, MyClass) なぜかエラーが出るのですがなぜでしょうか??? >>97 vba リストボックス 重複除去 辺りで検索すれば山程出てくるよ ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.0 2024/04/24 Walang Kapalit ★ | Donguri System Team 5ちゃんねる