X



Excel VBA 質問スレ Part57
■ このスレッドは過去ログ倉庫に格納されています
0726 ◆QZaw55cn4c
垢版 |
2018/10/20(土) 14:06:53.02ID:9jkSTDWo
>>725
アセンブラとか環境とかはどう調達すればいいのでしょうか?
0727デフォルトの名無しさん
垢版 |
2018/10/20(土) 14:48:16.50ID:wrk6+Nbn
masm とか nasm とかのキーワードで調べる
っていうか、vbaの範囲外のことまでここで聞くなよ
0729デフォルトの名無しさん
垢版 |
2018/10/20(土) 18:35:11.69ID:fOofNO0j
>>726
齧るだけだからネットで調べてだいたいの仕組みが分かればそれでいいんだよ
「アセンブラ 入門 casl」でググって見つかったサイトで勉強してみるのがいいと思う
資格の勉強にもなるし

やる気あるなら機械語が使えるポケコンを買って実際に
ハンドアセンブルしてみるのもいいかも
0730 ◆QZaw55cn4c
垢版 |
2018/10/20(土) 19:32:33.10ID:9jkSTDWo
>>729
casl2 は気が進まなくって…だってハードがないんでしょう?
0731デフォルトの名無しさん
垢版 |
2018/10/20(土) 19:45:41.44ID:fOofNO0j
>>730
うん、ハードはないな、仮想CPUだから
でもコンピューターの仕組みは分かるようになる
俺はアセンブリの知識のおかげでデバッグとかで役に立ってる
0732デフォルトの名無しさん
垢版 |
2018/10/21(日) 09:08:05.20ID:kG1rnb84
オデッセイのやってるvbaの試験受けてvbaスタンダードに合格したけど、
これ実際にvbaでプログラム作れって言われても絶対作れないな。

何が言いたいかって、お前らすげーわ。
0734デフォルトの名無しさん
垢版 |
2018/10/21(日) 12:30:29.51ID:jhIwJ9RB
vbaで色々ツール作ってるけど、自分しか使わないっていうので設計雑になっちゃう。
後の機能追加等考えるとクラスモジュール使って役割ハッキリさせた設計が良いんだろうけど、結局書くのが楽な手続き型チックになっちゃうのよね
0737デフォルトの名無しさん
垢版 |
2018/10/21(日) 17:38:59.00ID:PQvzxFzP
VBAはコードのスタイル云々以前に存在自体が基本的に悪なので、実務においてはいかに使用を最小限にとどめながら要件を満たすかが最も重要だよ
VBAがあるだけでメンテができる人が数十分の一になるんだから
0739デフォルトの名無しさん
垢版 |
2018/10/21(日) 18:14:38.25ID:PQvzxFzP
>>738
別にVBAで飯食ってる人を批判するつもりはないよ。
プログラミングにおいて>>734の言ってるような適切なモジュール化(VBのModuleではなく広義のモジュールだぞ、念のため)を行う目的は、メンテナンス性を良くすることだ。
そして、Excelのメンテナンス性を高める最善の方法は、VBAのコードを綺麗に書くことではなく、VBAの使用を極力控えることだ。
VBAのメンテナンス性を高めようという発想は根本的に矛盾してるんだよ。
0740デフォルトの名無しさん
垢版 |
2018/10/21(日) 19:06:18.04ID:jhIwJ9RB
VBAの存在が基本的に悪という理由って何だ?
文面から見て、メンテできる人(使用者)が少ないからという風に捉えているんだが…
もしそれが理由ならば、職場によるのではないか?
0741デフォルトの名無しさん
垢版 |
2018/10/21(日) 19:13:25.11ID:jhIwJ9RB
ただ、以前にマクロを修正する案件をやった時
初めて他者の書いたコードをしっかり見ることになったが…まぁ見辛いし目的が捉えづらく苦労した。
ろくなドキュメントも残っていなかったしね。
でもそれは、コードの改善や仕様書をしっかり残せば解決する問題であって、決して言語そのもののせいではないと私は思っているよ。
0742デフォルトの名無しさん
垢版 |
2018/10/21(日) 19:36:36.64ID:MDetJiiM
言語や開発環境が悪いからユーザーが集まらない
言語や開発環境が悪いからユーザーが育たない
言語や開発環境が悪いから汚いコードが作られやすい

全てとは言わないが大きな影響力を持ってるのは否定できないな
0744デフォルトの名無しさん
垢版 |
2018/10/21(日) 20:57:14.28ID:Mf4U6jjq
Pythonを使える環境ならPythonでExcelを操作できるようになっといたほうが将来的に有意義なんですかね
0745デフォルトの名無しさん
垢版 |
2018/10/21(日) 21:27:31.42ID:y1r4bkf6
>>744
何を目指すかによる
プログラマーならexcelはまず触らない
事務職ならpythonを触らない
両方知っておくことは悪いことじゃないが、どっちっつかずになりそう
0746デフォルトの名無しさん
垢版 |
2018/10/21(日) 21:55:52.80ID:Df7SvDdo
知恵遅れに毎日60以上ののVBA低レベ質問が恒常的に続くのは、商業科がExcelを教科に入れてるせいか?
VBA、大学教養のC課題、ネトゲーマーのUWSC自動化の三馬鹿うんざりトリオをなんとかして欲しい
0749デフォルトの名無しさん
垢版 |
2018/10/24(水) 21:19:25.29ID:I9F6CV18
昔アセンブラやってたけど
今はアセンブラの知識なんて
まず糞の役にもたたない
悪いことは言わないから
IL止まりにしておいて
残りの時間を他の言語の学習に回した方がいい
0750デフォルトの名無しさん
垢版 |
2018/10/24(水) 23:52:56.26ID:PFCPc8y/
VBAってWinAPI 使えるんだな
入力もエクセルのシート利用できるし使いがっていいなこれ
自分だけ使うものはこれで十分な気がしてきた
0753デフォルトの名無しさん
垢版 |
2018/10/25(木) 09:32:39.27ID:r31i+JfI
人間が抽象化なしで無理なく扱えるデータは二次元の表までなのは確かだな
特別な技能を持たない人間の能力的限界がExcel
0754デフォルトの名無しさん
垢版 |
2018/10/25(木) 11:20:28.64ID:Poeqy0yu
行(列)をベクトルだとみなすと何次元にでもなるでしょ
テンソル入れ物にするメリットってあるか?
レベル上がると有益になるのかな
0755デフォルトの名無しさん
垢版 |
2018/10/25(木) 18:41:01.78ID:lvTxqVIL
>752
文字列と数値。ってかこれ以外セルには入れられないでしょ。オブジェクトは入れられないし
0760デフォルトの名無しさん
垢版 |
2018/10/26(金) 10:34:09.86ID:FHu9JUdN
>>750
当然だがWinAPIだけじゃなくVB呼び出しに適う任意のAPIが呼べるから、自分だけの環境なら何だって可能
0761デフォルトの名無しさん
垢版 |
2018/10/26(金) 10:45:47.31ID:REmVcuAB
解凍・圧縮用のdllであるunlha32やらunzip32なんかもちゃんと用意されていて、vbaから利用できるしな
0764デフォルトの名無しさん
垢版 |
2018/10/26(金) 20:18:33.42ID:7acxRmxq
それ言い出すとシェル呼び出してそこから外部プログラムの実行でなんでもできるわな
0767デフォルトの名無しさん
垢版 |
2018/10/27(土) 12:17:32.77ID:nqyfF+/M
なんで何でもできたら悪いみたいな言い方やねん
0770デフォルトの名無しさん
垢版 |
2018/10/27(土) 20:08:09.98ID:9XazvJsa
助けてあげても一瞬感謝されるだけで何も起こらないぞ
下手すると感謝すらされない
0773デフォルトの名無しさん
垢版 |
2018/10/28(日) 06:55:12.79ID:xmv6f/Y+
全然助けれとらんやんwプロさんあわれwww
0774デフォルトの名無しさん
垢版 |
2018/10/28(日) 09:41:11.55ID:U+AZbxUR
ちょっとしたことでいいからピンポイントで教えてあげる。
食いついてこなかったら諦める。
0776デフォルトの名無しさん
垢版 |
2018/10/28(日) 11:02:16.86ID:eT9vyE0h
ランダムアクセスファイルでデータ管理をしています。
いままで動いていたものが 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に変更し正常動作中です。
0777デフォルトの名無しさん
垢版 |
2018/10/28(日) 11:41:59.08ID:THaxkhg7
さすがに時代遅れにも程がある
そんな黴の生えたゴミカスは今すぐ捨てて普通にワークシートで管理するかDBにしろ
0779776
垢版 |
2018/10/28(日) 16:59:37.36ID:eT9vyE0h
すみません
もともとはワークシートで管理していたのですがファイルのほうが
都合が良いので変更しました。
0780デフォルトの名無しさん
垢版 |
2018/10/28(日) 17:01:07.70ID:ISWax1Kh
で、今まさにその前提が間違っていたことが判明したんだろ?
直ちに戻しなさい
0781デフォルトの名無しさん
垢版 |
2018/10/28(日) 20:08:41.54ID:4pkRNiip
馬鹿の特徴

動きません
エラーが起きます

決して具体的なエラーメッセージを書かない
0782デフォルトの名無しさん
垢版 |
2018/10/28(日) 21:40:15.40ID:uzLWPyey
バカの特徴
書いてあるエラーメッセージを理解できずに自爆 w

> GET PUT で 「レコード長が一致しない」となります。
0783デフォルトの名無しさん
垢版 |
2018/10/28(日) 23:30:32.75ID:9UvKiQNH
ここの住人回答者は居丈高だからteratailにでも質問なさい。
ただコード具体例とエラー詳細はいずれにせよ求められるけど
0784デフォルトの名無しさん
垢版 |
2018/10/29(月) 00:30:55.69ID:4Xu2UR6y
>>782
馬鹿は表面的なことしか見えない
0786デフォルトの名無しさん
垢版 |
2018/10/29(月) 09:45:00.02ID:uMisuGYK
初心者には環境とかエラーの詳細な条件を明記することへの心理的な障壁があります
その心理の正体は一体何でしょう?
0787デフォルトの名無しさん
垢版 |
2018/10/29(月) 10:53:33.28ID:VYDzXbvz
慣れの問題かと
・自信ないのでミス指摘されたくないなどの自尊心問題
・コンプライアンスリスクとの取り違え
・個人情報リスクとの取り違え
0788776
垢版 |
2018/10/29(月) 11:24:48.23ID:aqnyYxuj
少し荒れてしまいましたね、すみません

エラーは書いてあるとおり「レコード長が一致しない」
Openステートメントで指定された長さと異なるということなのですが
レコード変数やOpen Get Putのプロシージャなど変更せずに
このエラーが発生しました。多分VBAのバグだと思うのですが
詳しい方に教えていただきたく思いまして書き込みしました。
タイミングが悪かったですね。
0789デフォルトの名無しさん
垢版 |
2018/10/29(月) 11:33:02.57ID:f3zS/Ojj
確かにタイミングが悪かったな
20年遅いわ
今回お前が苦労して解決しても後で他の誰にも分からないんだぞ?
そんなもん押し付けられる方の身にもなってみろ
0792デフォルトの名無しさん
垢版 |
2018/10/29(月) 14:25:31.25ID:gsxtgvfG
>多分VBAのバグだと思うのですが

まぁ言語の方に責任を押し付けたくなるのは判るがなw
0794デフォルトの名無しさん
垢版 |
2018/10/29(月) 16:45:28.78ID:gkooAort
>>788
バイナリエディターでレコードファイルを確認するのと、テスト環境作ってレコードを減らしても発生するかみる
0796776
垢版 |
2018/10/29(月) 19:56:48.16ID:aqnyYxuj
>>794
エラーになる状態ですと、新規にファイルを作成しても1レコード目でエラーとなりますので
ファイルがおかしいとは思えません。ユーザー定義のレコードサイズ、モジュール変数の
メモリ設定があやしいと思うのですが。
0797デフォルトの名無しさん
垢版 |
2018/10/29(月) 23:29:14.96ID:cO8xV5Br
素人質問ですみません
エクセルで消費税を算出したいのですが、一つのセル内で完結できないでしょうか
ググっても税抜き価格と税込み価格の、二つのセルを使うものばかりでして
0798デフォルトの名無しさん
垢版 |
2018/10/29(月) 23:52:48.29ID:g/o5tBon
>>791
まさかな、と思ってぐぐってみたら本当だった。
しかもqiitaの新着記事にもそんなのあるし。

なぜなのか?
0801デフォルトの名無しさん
垢版 |
2018/10/30(火) 12:34:46.04ID:MiaEkZFI
>>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
0804デフォルトの名無しさん
垢版 |
2018/10/30(火) 18:40:58.23ID:bEYZFX0T
くだらない質問だと思いますが、会社のバーコードで在庫 納品書 委託 委託精算 等 連携したものを作成する場合は初心者でどのくらい作成期間がかかるものでしょうか?
0806デフォルトの名無しさん
垢版 |
2018/10/30(火) 18:53:25.90ID:E+8/TrgC
少なくとも、SIerに委託するより>>804の給料の方が遥かに高くつくくらいの期間は間違いなくかかるよ
0807デフォルトの名無しさん
垢版 |
2018/10/30(火) 19:15:41.01ID:bEYZFX0T
>>806
因みに幾らくらいかかるものでしょうか?
0809デフォルトの名無しさん
垢版 |
2018/10/30(火) 20:01:06.67ID:UXC/r+zj
テーブル(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) '「ライチュウ」が表示

修正があるたびに配列を代入し直すのは面倒なので出来れば値を直接書き換えたいのですが、どうすればいいのでしょうか。
0810デフォルトの名無しさん
垢版 |
2018/10/30(火) 20:25:09.48ID:4tQqoM/4
>>809
そもそもlo.ListColumns(lc.Name).Range.Item(Index).Value でテーブル内のセル値のセッターにアクセス出来るので、わざわざそんなことをやる必要がないと思う
仕様上ListObjectは列名重複が許されないし、ListColumnsコレクション自体がDictionaryと殆ど等価のハッシュテーブルになる
0811デフォルトの名無しさん
垢版 |
2018/10/30(火) 20:50:28.74ID:UXC/r+zj
ありがとうございます
現在はそうしているのですが(元々それがやりたくて全部テーブルに置き換えたのですが)
値を取り出すときに毎回ListColumns(lc.Name).DataBodyRange(Index).Valueと長々書く為コードが読みづらいのと、配列にすればちょっと速度改善が見込めるかなと思って試していました。
0812デフォルトの名無しさん
垢版 |
2018/10/31(水) 13:51:41.06ID:OKzw5dxl
Dictionaryの代替以外の回答もお待ちしてます。


あと追加で質問なのですが、先ほどのTransposeの様にワークシート関数を利用するなら配列ではなくセル範囲の方が速いという記事を見つけました。
どういう原因でそうなるのでしょうか?
0813デフォルトの名無しさん
垢版 |
2018/10/31(水) 17:54:26.42ID:Dz4usJiG
一般的にユーザーによる同等のVBAコードよりワークシート関数の方が速い
C#とかよりC++ネイティブの方が数〜倍速くなるのと同じ
0815デフォルトの名無しさん
垢版 |
2018/10/31(水) 18:30:36.22ID:b54HYVzl
>>812
組込みの機能はアプリケーション内でリソース管理が最適化されてるのでね
VBAでやると不要な大きさのバッファを確保してたりして無駄が多くなる
0816デフォルトの名無しさん
垢版 |
2018/11/01(木) 07:11:29.46ID:hEMz+97b
シートにボタン配置して押したら、オートシェイプの直線を引ける段階までって出来る?いわゆるショートカットキー的な感じの。
実際に直線を引いちゃうのは山ほどネットに転がってるけど、引くのは任意でやりたい。
0818デフォルトの名無しさん
垢版 |
2018/11/01(木) 18:36:00.35ID:Nl3jEz8g
Excelのセルに入ってるデータを使ってOutlookでメールをVBAで書きたいのですが
それぞれの行やある文字についてフォントや色などで装飾したいんです。
そんなことはできますか?
なんかできなそうなんですが。
でもこれをしないとものすごく不便なのです。
うまくいけば残業せずに遊びながら居残りしてお金だけはたくさんもらえるのですが・・・
0820デフォルトの名無しさん
垢版 |
2018/11/01(木) 19:09:06.19ID:Nl3jEz8g
>>816
サルでもできるよw
単にボタンにマクロの登録をすればいいだけ。
0822デフォルトの名無しさん
垢版 |
2018/11/01(木) 19:18:10.81ID:Nl3jEz8g
>>821
ボタンを挿入して右クリックしてマクロの登録を選び実行させたいプロシージャを選ぶだけ
0824デフォルトの名無しさん
垢版 |
2018/11/01(木) 19:24:41.75ID:9hAL4zo4
>>818
やったこと無いけどHTMLメールにして本文をHTMLにすれば良いんじゃない?
あとはテキストメール作成と同じじゃないの?
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況