Excel VBA 質問スレ Part61
■ このスレッドは過去ログ倉庫に格納されています
!extend:checked:vvvvv:1000:512
!extend:checked:vvvvv:1000:512
ExcelのVBAに関する質問スレです
コード書き込みや作成依頼もOK
※前スレ
Excel VBA 質問スレ Part60
https://mevius.5ch.net/test/read.cgi/tech/1552736349/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured VBAに浸ってると
脳回線が行き当たりばったりでぐちゃぐちゃになるようだな… >>651
VBAで無理な処理ってどういうの?
リッジレーサーを移植するとか? 怒涛の3連投ww
今どきはドライバーもCとかで作るのが普通と言うことも知らんのだろうなw PHP7, Python3 は、互換性が低いから、全く同じものを作り直しているだけだろ。
Ruby は互換性が高いから、作り直さなくても動くから、プロジェクトの数が少ない
雑誌・web サイトの記事もそう。
PHP7, Python3 の記事は、書き直しただけで、内容は以前と同じ
テキスト処理なら、圧倒的にRuby が有利!
>>637
PowerShell, PowerShell ISE の両方は、Windows に、元から入っている
>>639
銀行でも、有料のExcel から、無料のLibre Office へ移行した所もある。
有料ソフトはインストール時に、管理部門に申請書を書いたり、代金支払いなどの手続きが面倒だから 非生産的というかなんかエライ古い話ししてるな〜って印象しかないで >>692
お前のようにスキルの無い奴では無いのでそんなあたり前の話を知らない筈が無いだろw
それに全く反論に成ってない。 世の中けっこう非生産的だよ
著作権とかセキュリティとかリバエン禁止とかいろんな理由で他人の作ったコードは使えないから、まったく同じ結果の出る関数を1から書き直せって仕事がけっこうある
まあ、車輪の再発明を強いられるのは、どんな業界でもあるんだろうけどさ >>690
VBAでも高速化するテクニックは沢山あって、それをきちんと考えて組む上級者は遅いと感じることはあまり無いと思う。
けれども、どんなにテクニックを駆使しても限界はあって、本質的に遅い部分は他言語を使った方が良い場合もある。
Excel上の部品で、VBAでは作成不可能なものもある。 シートやフォームに貼り付けるコントロールの自作はVBAでは無理なのでは インプリンタだし並列処理が出来ないから最近の大容量データ処理にそもそも向かない セルA1,B1,C1,D1に4,3,2,1と入っていて500行目まで同じようにランダムに数字が入ってる状態で、1行ずつ500行目まで全て昇順にソートするプログラムを教えてください。
マクロの記録で1行分をコピペして作ったんですがセル位置直すのに心折れてしまいました。
for nextで繰り返し処理できるようなプログラムでできませんでしょうか。よろしくお願いします。 >>700
そういうものより独自のPaneを追加したりの例が過去スレで挙げられてた。
こういうのは(コントロールもそうだけど)C#とかで作るのが楽でしょう。 >>702
上級者がこういう質問に回答したいと思わないのは、あなたは何でFor Nextで出来ないのか、あなたはFor Nextで書こうとした時にどこで詰まっているのか書いて無いからなのね。
想像するに、1行分のマクロ記録の部分を例えばk行目についてkを使って表現出来ないからだと思うんだけど、違うかな? >>702
標準的なWindows環境でファイルを使う前提ならば、.NETのArrayListクラスのSortメソッドを使って各行の値を昇順ソートしてから代入してしまう手順にするのが楽かな
制御フローは{各行の処理{各列の処理}}というオーソドックスな二重ループで事足りると思う
ArrayListはCreateObject("System.Collections.ArrayList")でインスタンス生成できる
詳細はググってね >>700
そう言えば、コントロールの自作は無理でもクラスにすることはあるね。
でもクラス単体で完結させるのは難しい。
WndProcは標準モジュールに置くしか無いから。
でも変数にマシン語を入れて無理矢理クラスにWndProc置いてた人がいたな。
こういうレベルまで来てるなら明らかに自分よりレベルが上だね。 >>702
Sub Macro1()
For r = 1 To 500 ' 1行目から500行目までソート
Set Ra = Range("A" & r & ":D" & r)
ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add2 Key:=Ra _
, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Sheet1").Sort
.SetRange Ra
.Header = xlGuess
.MatchCase = False
.Orientation = xlLeftToRight
.Apply
End With
Next
End Sub ユーザーフォーム上に動的に生成したコントロールでenterイベントとれないんだけど仕様? >>701
でかいデータ処理自体はExcelにやらすべきでしょ
ネイティブだしマルチスレッドでやってくれるし >>696
> お前のようにスキルの無い奴では無い
他人が言うならまだしも自分で言うとか恥ずかしくないのかな?
まあまともな羞恥心あったらアホレスを延々しないかw >>712
お前は>>706が理解出来るか?
長いこと見てるがここで他で見たような高度な話に出会ったことがないわ。 >>714
そりゃvbaで高度な事をする理由がないから当たり前だろう
VBAは事務や営業がルーチンワークをちゃちゃっと楽するための言語だよ 上の方でリッジレーサーとか書いてたけど、そういう高度(?)なこともできなくはないで
昔、excelのフォーム上にdirectxで3Dオブジェクトとか動かしてたから
ラッパー作ってやれば相当いろんなことできる
(参照設定は含まないとか狭い了見のやつは知らん) Win32API呼べるんだからそら何でもできる事はできるでしょ >>716
理由のある場合もあるし、実際やってる所もある。
>>717
今はDirectXがほぼ扱えなくなってるから難しいけどね。
>>715
これが分かり易い例かな(VBだけど同じようなやり方はVBAでもできる)。
http://nienie.com/~masapico/doc_FuncPtr.html >>694
× rubyは互換性が高い
○ rubyは進化が高い
>>640でも言ってる通り、rubyは進化をサボりまくって完全に置いていかれた言語
端的に言うとゴミだ プログラム板にはところ構わずrubyネタを書き込むキチガイが常駐してます。
ご注意を。 会社で使ってるpcをwin10アップグレードwin7機をwin10プリインストール64bit機にしてもらったらDAO3.6の参照設定がされてる会社共有マクロファイルが動かなくなっててワロタ
参照設定をAccsess database engineに切り替えてあげて動くようにしてあげたら賞賛されてワロタ
古い技術・pc使ってんなぁ…と思った >>710
クラスモジュールで
Private WithEvents Obj As MSForms.TextBox
と宣言しておいて
form.Controls.Add("Forms.TextBox.1",str)
で生成してObjにSet
Private Sub Obj_Enter()でObjへのフォーカス移動を取りたいが取れない
labelのonClickとかは同じ方法でできてるんですが… 702です。色々とありがとうございます。704さんの仰る通りでございます。707さんのではできませんでしたが、大いに参考にさせていただき無事できました。助かりました! 使用人数の多い人気の言語なんて価値が低い
使える奴が溢れてるから君の代わりは沢山いるから明日から来なくて良いよ >>727
>使用人数の多い人気の言語なんて価値が低い
人件費と言語の価値をごっちゃにしすぎ
使用人数の多い人気の言語
>だからこそ価値がある
だよ >>714
どこが高度なのかさっぱり
変数にコード入れるとかむしろ昔の方がやってた(って言うかやらざるを得なかった)
Peek, Pokeとかあったしな
今のOSはチェックが厳しくなったからそのあたりは面倒になってるし低能がマウント取りたいだけにしか役立たんよw >>725
Enterイベントに入りすらしないということ? >>725
そいつはマジメにやるとすればとっても高度な奴だね。
OLE/COM Viewer使って情報取得して、ゴニョゴニョ...。
工夫で乗りきる方法も有るようだけど。 >>729
Peek、Poke使ってた時代はそれが簡単に出来た。
今は面倒になってるから高度なんだろ。 >>729
使わないとプログラムの構成が汚くなる。
で、これを知らなかった頃にクラスにWndProc置けないの何とかならんかと思ったことがある。
同じように考える人がいたからこれが実践されたわけ。
つまり、マウント取りたいだけにしか役立た無いなんて想像するようなアホなレベルの人では理解するのは力不足だよ。 >>719
GetProcAddress って何だっけ?
自分は AddressOf は大量に使ってるけどこいつは知らないな マウスを砂時計にしたいがためにWin32呼んでるアホマクロならこの間見つけたな >>736
関数名を文字列で渡すのか...
関わりたくないな Excelで出来ることを屁理屈で言ったら、究極は何だろうな。
VBSでも、IE画面にタグを書き込めば、GUIを作れる!みたいなの。 言葉尻を捉えて揚げ足取り合ってて楽しんでるようにしか見えない そうだな。文字列データあればなんでもできるくらい愚か。 VBAで必要にならない処理なら単なるビックリ処理で終わりだろうな。
それじゃ意味が無い。 シートやブックの指定を毎回名前で指定してるコードをよく見るけど、処理遅くなるし保守性悪いしでいいことないのになんでやってるんだろ >>731
あらかじめ設置しておいたテキストボックスをwithEventsのObjにSetすれば同じ方法でEnterイベントとれるんですが
>>732
やはり普通のやり方ではとれないのが仕様なのか >>733
高度なのと面倒なのの区別もつかないのかよw
>>734
今それやってるやついるか?
そもそもVBAの中途半端なクラス機能なんてたいして使えないし あ〜〜電子タバコ意味ないんじゃ〜〜
金返せ〜〜〜〜〜 >>747
高度だが。
Windowsがどのようにして動いてるかなど、Peek、Pokeの時代は知る必要さえ無かった。
やってる奴はいる。
自分のスキルの問題を言語のせいにする奴にとっては中途半端なんだろうな。 まあせいぜいコンストラクタに引数も持てない、継承もできないクラスでOOPごっこでもしてればいいんじゃね?w >>752
結局こういうことを言う人はC#だろうがPythonだろうが自分のスキルが足らないとこの言語はダメだと言って自分のスキルを上げるとか工夫するとはならないんだろうな。
文句を垂れるだけで自分で解決しようともしない。 どうやって解決するんだよw
解決策の一つでも出して見てから言えよ
ちなみにC#とPythonもコンストラクタに引数は持てるし継承もサポートしてる >>752
コンストラクタに引数持てないことを問題視する意味がわからん
どんな言語も万能じゃない
他のやり方で解決できるなら、そうするんだよ
アセンブラしか使えないなら、その仕様範囲でプログラミングするんだよ
大きな口叩くならお前が万能言語作ってみろや > 大きな口叩くならお前が万能言語作ってみろや
クスクス >>755
> コンストラクタに引数持てないことを問題視する意味がわからん
えっ、まじで言ってるの?
クラスを持つ他の言語はたいていコンストラクタに引数持てるよね?
その意味もわからないの?
> 他のやり方で解決できるなら、そうするんだよ
だからVBAでクラスなんて使いどころが限られるって話なんだが…
> 大きな口叩くならお前が万能言語作ってみろや
極論で反論したつもりになる低能乙w コンストラクタに引数持て無いことの意味が分からないってアンタw
プログラム開発の経験ないって自分から言ってるようなもんじゃないか そんな局所的なこと言ってないってのが例えでわからんよねバカ達は
井の中で叫んでるやつは議論する価値なし PEEKとか懐かしいな
ポケコンかな
ずいぶん長い間、携帯雑誌に書いてる機械語をどうやって入力するのか分からなかったな
ベーマガはポケコン少なかったしな でも今のVBAは詳しく説明してくれて良い時代だよな
基本書と後はネット渡歩けばそこそこは作れるな
昔はベーシックは簡単だったがやれることが限られすぎてて
結局機械語に行かないと話にならなかったが、買った本が悪かったのか全く理解できなかった
代入ばかり書かれててもどうやったらゲームができるのか分からないよってよ >>690
そもそもだ
お前の頭じゃどんな言語を持ってしても
リッジレーサーは作れんだろう
俺にも作れない >>755
彼は日本語が読み取れないようだね。
どんな言語でもダメな部分はある。
その度に文句垂れて何もしない負け犬人生が目に浮かぶ。 >>765
>>754
具体的に語れないなら黙ってなよw >>748
動的リンクは LoadLibrary くらいまでなら許容できるけど関数単位は御免だよ
継承はいらないしインタフェースもいらない >>767
お前はLoadLibraryだけして何をするつもりなんだよw >>768
Dll ファイルに対してLoadLibrary したら、そこに含まれる関数はすべて普通に呼び出せるだろうが >>770
?
個々の関数名を文字列で渡す必要があるかないか、って話だぞ
>>719 で出た GetProcAddress の話が続いている >>771
だからLoadLibraryで得たハンドルをどう使う気なんだよ… >>772
ハンドルの使い方なんて関係ないだろ?
実行時に関数単位で文字列による指定をしなくて済むって言ってるだけだよ LoadLibrary()の下に関数を呼び出すコードを書いてみよ
ということでは Declare PtrSafe Function func Lib なんたら〜
だろ GetProcAddress がwindowsAPIならLoadLibrary もwindows API
API に文字列を渡して何かにattach するときに、関数単位なのかファイル単位なのかってだけの話だよ。
使う関数が多数あることを想定している。 >>775
それ使うならLoadLibrary関係ないだろw
言ってることがチグハグすぎる >>777
パスの解決に使うじゃないか
全部のDeclare 文にパス入れてんのか? >>778
今時 AddDllDirectory と SetDefaultDllDirectories でやるだろ… >>766
解決するつもりは無いのですよw
日本語分かります?
>>753は解決できるなんて話してないんですよ。
VBAのコンストラクタ問題を否定していない。
>>753はあなたのような人はC#で解決出来ない問題が出てくるとC#をこき下ろすだろうと言ってるにすぎない。
それとも「解決しようともしない」に反応してるのかな?
そういう話なら簡単です。
動作で問題になるよりコンストラクタ問題の解決は小さなことだからですよ。
あなたはコンストラクタ問題が解決出来ないからVBAでは実現出来ないと言って手を引いた。
しかし、私にとってはコンストラクタ問題が解決出来なくてもVBAで実現出来ることの方が上です。
動作の面でVBAの方が上となればの話ですが。
そしてVBAでの開発は限定された土俵であるがゆえに動作の面で上と成りやすい。
したがって総合的に有利となるわけです。 このスレ、質問に答えるというよりよくわからないレスバトルを楽しむ場所になってるよね >>780
誰もVBAを使わないなんて言ってない
VBAのクラスは使いどころが限られる言ってるんだが…
> 日本語が読み取れないようだね。
自己紹介だったのかw >>779
まあそれはあれだ
Windows 7 ェ... >>782
???
「どうやって解決するんだよw」などと発言してるのに?
論理的思考も出来ないのかね?
クラスの話はとても分かりやすい。
>>747を読めばVBAのクラスの欠点を少しでも減らそうとせずに放棄し、その上その努力をした者に対してマウントを取ろうとする愚か者の姿がよく見える。
クラスに問題があることよりも動作に問題の有ることの方が問題なのは当然だと思うんだがね。
1ファイル問題はその一部なんだが。 >>784
> 「どうやって解決するんだよw」などと発言してるのに?
そりゃ>>753が
> 文句を垂れるだけで自分で解決しようともしない。
なんて言ってるんだから当然解決策ぐらい持ってるだろうからな
まさか解決策も持たずに吹いてるだけじゃないでしょ?
> 論理的思考も出来ないのかね?
お前がなw >>785
おまえには不要かもな
ただ他の言語ではたいていサポートしてるから一般的には需要があることぐらいはわかるよね? VBAのクラス(モジュール)の残念な点
・プロジェクト外から New できない
・だからcreate〜 関数を作るしかないけど当該クラスモジュールに置けない
・その他関連するちょっとしたヘルパー関数とかも中に置けない
・コンストラクタに引数がない
・End 時には Class_terminate が呼ばれない
・プロパティウィンドウに出ない隠し属性がある
・メソッドの AddressOf が取れない ■ このスレッドは過去ログ倉庫に格納されています