Excel VBA 質問スレ Part57
■ このスレッドは過去ログ倉庫に格納されています
ExcelのVBAに関する質問スレです コード書き込みや作成依頼もOK ※前スレ Excel VBA 質問スレ Part56 http://mevius.5ch.net/test/read.cgi/tech/1534976724/ masm とか nasm とかのキーワードで調べる っていうか、vbaの範囲外のことまでここで聞くなよ >>715 デバッグの方法(VBEの機能) ユーザーフォーム for next以外の繰り返し(do loop) >>726 齧るだけだからネットで調べてだいたいの仕組みが分かればそれでいいんだよ 「アセンブラ 入門 casl」でググって見つかったサイトで勉強してみるのがいいと思う 資格の勉強にもなるし やる気あるなら機械語が使えるポケコンを買って実際に ハンドアセンブルしてみるのもいいかも >>729 casl2 は気が進まなくって…だってハードがないんでしょう? >>730 うん、ハードはないな、仮想CPUだから でもコンピューターの仕組みは分かるようになる 俺はアセンブリの知識のおかげでデバッグとかで役に立ってる オデッセイのやってるvbaの試験受けてvbaスタンダードに合格したけど、 これ実際にvbaでプログラム作れって言われても絶対作れないな。 何が言いたいかって、お前らすげーわ。 vbaで色々ツール作ってるけど、自分しか使わないっていうので設計雑になっちゃう。 後の機能追加等考えるとクラスモジュール使って役割ハッキリさせた設計が良いんだろうけど、結局書くのが楽な手続き型チックになっちゃうのよね VBAはコードのスタイル云々以前に存在自体が基本的に悪なので、実務においてはいかに使用を最小限にとどめながら要件を満たすかが最も重要だよ VBAがあるだけでメンテができる人が数十分の一になるんだから >>738 別にVBAで飯食ってる人を批判するつもりはないよ。 プログラミングにおいて>>734 の言ってるような適切なモジュール化(VBのModuleではなく広義のモジュールだぞ、念のため)を行う目的は、メンテナンス性を良くすることだ。 そして、Excelのメンテナンス性を高める最善の方法は、VBAのコードを綺麗に書くことではなく、VBAの使用を極力控えることだ。 VBAのメンテナンス性を高めようという発想は根本的に矛盾してるんだよ。 VBAの存在が基本的に悪という理由って何だ? 文面から見て、メンテできる人(使用者)が少ないからという風に捉えているんだが… もしそれが理由ならば、職場によるのではないか? ただ、以前にマクロを修正する案件をやった時 初めて他者の書いたコードをしっかり見ることになったが…まぁ見辛いし目的が捉えづらく苦労した。 ろくなドキュメントも残っていなかったしね。 でもそれは、コードの改善や仕様書をしっかり残せば解決する問題であって、決して言語そのもののせいではないと私は思っているよ。 言語や開発環境が悪いからユーザーが集まらない 言語や開発環境が悪いからユーザーが育たない 言語や開発環境が悪いから汚いコードが作られやすい 全てとは言わないが大きな影響力を持ってるのは否定できないな >>734 言うてもそんなに長くならないので、コメントさえしっかり書いておけば大丈夫だよ Pythonを使える環境ならPythonでExcelを操作できるようになっといたほうが将来的に有意義なんですかね >>744 何を目指すかによる プログラマーならexcelはまず触らない 事務職ならpythonを触らない 両方知っておくことは悪いことじゃないが、どっちっつかずになりそう 知恵遅れに毎日60以上ののVBA低レベ質問が恒常的に続くのは、商業科がExcelを教科に入れてるせいか? VBA、大学教養のC課題、ネトゲーマーのUWSC自動化の三馬鹿うんざりトリオをなんとかして欲しい 昔アセンブラやってたけど 今はアセンブラの知識なんて まず糞の役にもたたない 悪いことは言わないから IL止まりにしておいて 残りの時間を他の言語の学習に回した方がいい VBAってWinAPI 使えるんだな 入力もエクセルのシート利用できるし使いがっていいなこれ 自分だけ使うものはこれで十分な気がしてきた 二次元配列に入力できるってかなり神がかってると思う 人間が抽象化なしで無理なく扱えるデータは二次元の表までなのは確かだな 特別な技能を持たない人間の能力的限界がExcel 行(列)をベクトルだとみなすと何次元にでもなるでしょ テンソル入れ物にするメリットってあるか? レベル上がると有益になるのかな >752 文字列と数値。ってかこれ以外セルには入れられないでしょ。オブジェクトは入れられないし 何を〜に入力できる? って質問に対して間違っちゃいないが... >>755 変数型のことじゃなくて、どんな データかって意味じゃね? わかるなら聞くなよハゲども なんでハゲてるか自問してろ >>750 当然だがWinAPIだけじゃなくVB呼び出しに適う任意のAPIが呼べるから、自分だけの環境なら何だって可能 解凍・圧縮用のdllであるunlha32やらunzip32なんかもちゃんと用意されていて、vbaから利用できるしな それ言い出すとシェル呼び出してそこから外部プログラムの実行でなんでもできるわな それだと最早Excel VBAを起点にする意味がないんだよなぁ 助けてあげても一瞬感謝されるだけで何も起こらないぞ 下手すると感謝すらされない 助けても後出しで本当はこうしたいのにできてないだの文句言われる ちょっとしたことでいいからピンポイントで教えてあげる。 食いついてこなかったら諦める。 ExcelVBAで、女にもてるようになる方法スレ w ランダムアクセスファイルでデータ管理をしています。 いままで動いていたものが GET PUT で 「レコード長が一致しない」となります。 一部こんな感じです。 Const MONTH_SIZE As Long = 60 Type M_Rec S_code As Long Stock As Long byCode As String * 8 M_id_Cre(MONTH_SIZE) As Integer End Type Public S_MAIN_REC As M_Rec Open FileName For Random As #SmainNO Len = Len(S_MAIN_REC) Get #SmainNO, indexNo, S_MAIN_REC この標準モジュールを破棄して同じモジュールをインポートすると 正常に動きますがワークブックを保存して再起動し同じ処理をすると エラーになります。 Public S_MAIN_REC As M_Rec の 記述場所を移動させると正常に 動きましたがモジュール内に新規プロシージャを追加したらまた エラーが出るようになりました。 モジュールが壊れていると思い新しく作成しても同じでした。 ご意見お願いします。 現在ユーザ定義 の M_id_Cre(MONTH_SIZE) As Integer の配列を 61に変更し正常動作中です。 さすがに時代遅れにも程がある そんな黴の生えたゴミカスは今すぐ捨てて普通にワークシートで管理するかDBにしろ 言い過ぎ。しかしランダムアクセスファイルとは懐かしい すみません もともとはワークシートで管理していたのですがファイルのほうが 都合が良いので変更しました。 で、今まさにその前提が間違っていたことが判明したんだろ? 直ちに戻しなさい 馬鹿の特徴 動きません エラーが起きます 決して具体的なエラーメッセージを書かない バカの特徴 書いてあるエラーメッセージを理解できずに自爆 w > GET PUT で 「レコード長が一致しない」となります。 ここの住人回答者は居丈高だからteratailにでも質問なさい。 ただコード具体例とエラー詳細はいずれにせよ求められるけど >>784 表面的なことすら見えてないバカの自爆乙 w 初心者には環境とかエラーの詳細な条件を明記することへの心理的な障壁があります その心理の正体は一体何でしょう? 慣れの問題かと ・自信ないのでミス指摘されたくないなどの自尊心問題 ・コンプライアンスリスクとの取り違え ・個人情報リスクとの取り違え 少し荒れてしまいましたね、すみません エラーは書いてあるとおり「レコード長が一致しない」 Openステートメントで指定された長さと異なるということなのですが レコード変数やOpen Get Putのプロシージャなど変更せずに このエラーが発生しました。多分VBAのバグだと思うのですが 詳しい方に教えていただきたく思いまして書き込みしました。 タイミングが悪かったですね。 確かにタイミングが悪かったな 20年遅いわ 今回お前が苦労して解決しても後で他の誰にも分からないんだぞ? そんなもん押し付けられる方の身にもなってみろ 「VBA ファイル読み書き」で検索してOpen コマンドとかが出てくるものかねえ >多分VBAのバグだと思うのですが まぁ言語の方に責任を押し付けたくなるのは判るがなw >>788 バイナリエディターでレコードファイルを確認するのと、テスト環境作ってレコードを減らしても発生するかみる >>794 エラーになる状態ですと、新規にファイルを作成しても1レコード目でエラーとなりますので ファイルがおかしいとは思えません。ユーザー定義のレコードサイズ、モジュール変数の メモリ設定があやしいと思うのですが。 素人質問ですみません エクセルで消費税を算出したいのですが、一つのセル内で完結できないでしょうか ググっても税抜き価格と税込み価格の、二つのセルを使うものばかりでして >>791 まさかな、と思ってぐぐってみたら本当だった。 しかもqiitaの新着記事にもそんなのあるし。 なぜなのか? >>796 最小条件での動作確認しないなら俺はなにもいわない >>797 税抜き価格を入力したら、そのセルの数値を自動的に1.08倍するマクロ Private Sub Worksheet_Change(ByVal Target As Range) Application.EnableEvents = False Target.Value = Int(Target.Value * 1.08) Application.EnableEvents = True End Sub くだらない質問だと思いますが、会社のバーコードで在庫 納品書 委託 委託精算 等 連携したものを作成する場合は初心者でどのくらい作成期間がかかるものでしょうか? 少なくとも、SIerに委託するより>>804 の給料の方が遥かに高くつくくらいの期間は間違いなくかかるよ >>806 因みに幾らくらいかかるものでしょうか? >>807 仕様がわからないので見積もれません 4000億円ぐらいみとけば間違いない テーブル(lo)を列毎に配列で取り出して処理したいのですが、キーを列名、値に列範囲を格納すればforループで代入できて簡潔なのでDictionaryを使ってみようと思っています。 Dim dic As Dictionary: Set dic = New Dictionary Dim lc As ListColumn For Each lc In lo.ListColumns _dic.add lc.name, WorksheetFunction.Transpose(lc.DataBodyRange.value) next lc 以上で作成した「Dictionaryの値」に格納した「配列の値」に代入が出来ません。 例えば debug.print dic(見出しA)(1) '「ピカチュウ」が表示 dic(見出しA)(1) = "ライチュウ" debug.print dic(見出しA)(1) '「ピカチュウ」が表示 となってしまいます。しかし以下の様に配列を格納し直すと反映されます。 debug.print dic(見出しA)(1) '「ピカチュウ」が表示 dic(見出しA) = Array("","ライチュウ", dic(見出しA)(2),・・・ debug.print dic(見出しA)(1) '「ライチュウ」が表示 修正があるたびに配列を代入し直すのは面倒なので出来れば値を直接書き換えたいのですが、どうすればいいのでしょうか。 >>809 そもそもlo.ListColumns(lc.Name).Range.Item(Index).Value でテーブル内のセル値のセッターにアクセス出来るので、わざわざそんなことをやる必要がないと思う 仕様上ListObjectは列名重複が許されないし、ListColumnsコレクション自体がDictionaryと殆ど等価のハッシュテーブルになる ありがとうございます 現在はそうしているのですが(元々それがやりたくて全部テーブルに置き換えたのですが) 値を取り出すときに毎回ListColumns(lc.Name).DataBodyRange(Index).Valueと長々書く為コードが読みづらいのと、配列にすればちょっと速度改善が見込めるかなと思って試していました。 Dictionaryの代替以外の回答もお待ちしてます。 あと追加で質問なのですが、先ほどのTransposeの様にワークシート関数を利用するなら配列ではなくセル範囲の方が速いという記事を見つけました。 どういう原因でそうなるのでしょうか? 一般的にユーザーによる同等のVBAコードよりワークシート関数の方が速い C#とかよりC++ネイティブの方が数〜倍速くなるのと同じ >>812 組込みの機能はアプリケーション内でリソース管理が最適化されてるのでね VBAで >>812 組込みの機能はアプリケーション内でリソース管理が最適化されてるのでね VBAでやると不要な大きさのバッファを確保してたりして無駄が多くなる シートにボタン配置して押したら、オートシェイプの直線を引ける段階までって出来る?いわゆるショートカットキー的な感じの。 実際に直線を引いちゃうのは山ほどネットに転がってるけど、引くのは任意でやりたい。 Excelのセルに入ってるデータを使ってOutlookでメールをVBAで書きたいのですが それぞれの行やある文字についてフォントや色などで装飾したいんです。 そんなことはできますか? なんかできなそうなんですが。 でもこれをしないとものすごく不便なのです。 うまくいけば残業せずに遊びながら居残りしてお金だけはたくさんもらえるのですが・・・ >>816 サルでもできるよw 単にボタンにマクロの登録をすればいいだけ。 >>820 う〜ん... 俺もできるとは思うけどそんなに簡単か? 何を登録するんだ? >>821 ボタンを挿入して右クリックしてマクロの登録を選び実行させたいプロシージャを選ぶだけ >>822 直線を引く直前の状態にするプロシージャって簡単に書けるのかい? >>818 やったこと無いけどHTMLメールにして本文をHTMLにすれば良いんじゃない? あとはテキストメール作成と同じじゃないの? >>824 じゃ具体的なコードはどうなるの? 例えば、「こんにちは、うんちと申します。」の文で、うんちを太字で茶色にしたい場合。 ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.1 2024/04/28 Walang Kapalit ★ | Donguri System Team 5ちゃんねる