Excel VBA 質問スレ Part66
レス数が900を超えています。1000を超えると表示できなくなるよ。
ExcelのVBAに関する質問スレです
コード書き込みや作成依頼もOK
※前スレ
Excel VBA 質問スレ Part65
https://mevius.5ch.net/test/read.cgi/tech/1584430040/
※デフォルト設定 >807
本人?。GW終わって更新控えめな気がする フォームを開いている際にセルをクリックしようとしても阻止されるんですが、
この行動を行った際にフォームを閉じるという処理をすることはできますか? ユーザーフォームのイベントで制御できなきゃ無理じゃね
一覧くらい見たんだろ >>812
この人はダメだね。
コメントでちょっと突っつかれただけで
コメント欄オフにするしプライドが高すぎ。
知識や経験が豊富で教え方も上手いとは思うけど
ユーチューバ―には向いてないと思うわ。 >>809
>>811
Application.Volatile
入れてみた
結果だけど、やっぱボタン押して数式代入した直後はダメだった
変らず#VALUE!
変化があったのは計算対象になっているセルを1つ変更すると、
MyFunctionが入っているセルの全てが再計算されて正常値が表示されるっていう点ね
Volatile入れる前は、変更セルを計算対象としてるセル1つだけが再計算された
ちなみにMyFunction(rng As Range)です。すんません
あと、これ重くなりそうでちと考えてしまう >>816
ボタンのコードの後ろに、Application.Calculate とかを入れる >>813
フォームを閉じるにはUnload ステートメント、非表示にするだけなら hide メソッドを使う
セルクリックが目的なら、ShowModal=False か、フォームのShowメソッドで vbModeless を指定すれば、閉じなくてもいいよ >>816
よくわかってなくてすまぬが数式入ってるセル全部選択して
Selection.Value = Selection.Value
とか「=」を「=」に置換するとかして内容同じだけど編集したことにすると
全部計算される、ってのは根本的な解決方法じゃないけどそれは別の問題? >>819
代入で再計算させるなら formula = formula だぞ このスレの住民ってVBAエキスパートとか余裕な感じ? 余裕でダメだと思う。
運転歴20年のやつが、教習所の学科試験に通るかどうか。 練習問題を見た感じ、満点は無理だけど合格はできると思う >>817
それ以前試してだめでしたわ
>>819
>>820
解決方法なのかどうかは置いておいて、面白い視点だなって思いました
Selection.Formula = Selection.Formula で、問題のあった2行のうち1行は行けました
この2行の違いを分析すると何か見えてくるかもしれないなぁ
似たような方法なんだけど、これはいけた
Dim ary
ary = Sheet1.Range("G11:AH11")
Sheet1.Range("G11:AH11") = ary
数式は表の最下部の行 G50:AH50 の各セルに入っていて、
例えばG50の数式はG11を引数の一部として使っている
計算の対象となっている値の一部を代入し直してみたってこと
Forで回して数式入れていくのは見た目ごちゃごちゃするから
わかりやすさっていう点ではこっちの方がいいのかな >>822
運転歴20年の奴は余裕で通る。
というか、はっきり言ってVBAエキスパートは初心者と変わらんよ。
某掲示板で質問者にもっと勉強してね的なこと言ったら持ってたようだった。 リストビューなるものを触ってみましたが2点分からないです。
@データを転記する際にwith文を使うとうまく出来て、使わないと一行ずつズレるのは?
Me.ListItems.Add
.Text = 111
.SubItems(1) = 222
.SubItems(2) = 333
End With
Addして追加だからズレるのだろうけど、withって単なる省略だから同じ意味じゃないの?
A転記したリストビュー全項目ループするにはどうしたいいですか? いや呼び方の問題とか、FormatだのStrComp関数だのあんまり使わんの出るから模試はやったほうがいいよ >>827
withはコード省略じゃなくて参照。
(増やす)ってメソッド処理は一回だけで、(増えた項目)って出力インスタンスを参照できる形になる
with 使わないと毎回(増やす+編集)の処理になる >>825
Selection.Calculate でもダメなんですよね? >>820
そうそう間違えました
表示形式が反映されないときに.Value使ったんでついそれ書いちゃいました >>833
表示形式反映させるなら.Formula = .Formula では そのコマンド打ったら参照先が見つかりませんってエラーが出たんだが 前スレの人達のくれた今の職場にいる限り永久に使える心臓部になるプロシージャ3つ
これのおかげで救われた
後はひたすら勉強しないといけない
ただそのせいで毎日夜中の2時とかまで強迫観念に捕らわれたように本やサイト見て体壊しかけてる
前スレの人達ありがとう そこまで初心者の人がやらなきゃいけないのか…
専門の派遣でも雇えば… 前スレ見えないけど
フォルダ内のテキストすべての特定の部位から文字を全部抽出するコード
これです 車輪の再発明どころか劣化真似事をありがたがるような馬鹿は消えろよ >>834
数式を値で張り付けたときに表示形式が反映されなかったんでValueだったんですよ 下記のような2次元配列があります。
1,りんご
2,ばなな
3.みかん
これの果物名の列だけをセルに代入したいですが、簡単な方法はありますか?
現状、果物の列を一端列数0の配列に入れなおしてそのままセルに代入する案しか思いつきませんが、
もっとスマートな方法あれば教えてください。 行列入れ替えは考慮外なの?
参考は沢山出てくる
EXCELのVBAで2次元配列の特定の列または行を1次元配列に変換する方法
qiita.com/takahasinaoki/items/1295c3df5ddfb13bdf8e >>847
貼り付け先の果物の前の列が消されても良いなら配列から1、2、3消してそのまま貼り付ける。
駄目なら貼り付け先の値を配列に入れてから貼り付ける。
貼り付け先の値を入れるのは本末転倒だからそういうデータが少ない場合以外は勧めない。 てか配列から直接セルに代入しないといけないってのは
データ数が多いとか速度重視したいとか?
そうでないなら基本通りにFor使って入れりゃいいだけなんだけど セルに入れるのがそもそも簡単なのに何ができないんだかわからん おまいら質問をちゃんと読んでるか?
「簡単な方法はありますか?」なんだから、Forで回すのは嫌ってことだろ
つまり回答は「そんな方法はない」 ステップ数を減らしたいだけなら、一旦そのまま全部ワークシートに入れて2列目だけコピペか1行目を削除すれば数行で完結する
たぶんForより速い 質問がどっかの問題の引用っぽく感じたので答えはかかないけどね 同じ社員同士なのにエクセルの便利機能とかを
情報共有しないのってなんなんだろう ループからの抜け方、@とAどっちが推奨?
@
do while
for
if
脱出フラグ = true
exit for
end if
next
if 脱出フラグ then exit do
loop
A
do while
for
if 脱出条件 then exit do
next
loop >>859
処理の抜けや他の処理に影響がないならという条件付きでA、
場合によっては exit sub 、exit function でも書く do whileの条件とifの条件ををandで繋いでdo while
loop行の前でi=i+1(forのカウンタ代わり)
これでよいのでは >>864
二重ループの抜け方の作法を聞いてるんだが do whileとforで2重ループするのが確定で、外側まで一気に抜けるのが確定なら2を選ばない理由がない >>866
二重ループの内側から一気に抜けたい時は、俺なら内側のループを別プロシージャにするか、Do Loopを二重にする
コード量によってはフラグ変数やExitは見通しが悪くなる、別の言い方をすれば終了条件がわかりづらくなるからあんまり使いたくない >>864,867,868
とりあえず処理に問題なければ一気に外に抜けること自体は問題ないってことか
確かにDoに変えるのも手だな
適当に使い分けることにするわサンキュー すごく個人的には、Do Untilで書いた方が「抜ける!」って読みやすい Do whileよりって話ね
そう書けば抜ける複数条件をDoの後ろに書いて違和感が無い これ… >>871に『その心は?』って聞いてあげた方がいいの? >>874
おじいちゃん出しっぱなしで片付けないんだもん Gotoはもちろんのこと、余程のことがない限りはExit For(Do)使うよりはExit Function使った方がいい Do While
何で
Loop
While
2つあるの?
Wend >>878
while〜wendは過去の名残
今はdo whileを使うのが正しい 一応、while wendは最後までループ抜けさせないぞって読ませ方ができる
知ってる人が少なくなってるからむしろ逆効果のお節介となってきているが 行番号とか代入のLetとかも使ってるやつはいない
過去の名残があちこちにあるのがVBA do while〜loopって構文が気に食わんわ
do [処理] while [脱出判定] loop
もしくは
while [脱出判定] do [処理] loop
のほうが思考に沿う
ってかdo必要? 職場の人が書くマクロ、わかりやすいんだけど無駄改行多くてスクロールしないと全体像掴めないでつらい >>883
While [脱出判定]
[処理]
Wend >>883
構文解析でトークンの先読みが少なくて済むための配慮じゃないかな、知らんけど >>883
英語として
Do while a is b. If a is bigger than b, then break..
というのと
While if a is bigger than a, do something.
どちらが自然かという問題だったようだ。どっちも変だけど ちょ、VBAのCollectionのAddメソッドってvalue/keyの順番だったのかよぉ
C#もJavaもPythonもkey/valueの順だから勘違いしてたわ!
なんかおかしいとおもった >>894
Add時にKeyを省略できるからね
省略するとKeyがどうなるのかは知らんけど >>895
重複排除できてねぇぢゃねぇかクソ言語がぁぁぁ!って思ってましたごめんなさい >>896
重複排除したいならdictionaryの方がいいんじゃないか >>888
それは1プロシージャの行数が多いということかな?
それはダメダメだ。
そういうことになることはあるけど、本人が書ける奴なら自分でも分かってるかもね。
時間があれば直すんだけどってのは時々ある。 excelからwordのoleなのですが、印刷プレビュー画面が表示されている
あいだは処理を停止させておきたのですが、どうすればできますか?
また、excelのほうのPrintPreviewメソッドではそれが実現できるのですが、
その違いはなんなのでしょうか。
Dim WORD As Object
Set WORD = CreateObject("Word.application")
WORD.Documents.Open(filePath)
WORD.PrintPreview = True
Do Until WORD.PrintPreview = False
Loop >>896
重複排除したきゃKey指定すればいいだけだろ
てか、そういう使い方しかしたことないわ PCに疎い人達の集まる職場
週に1回の頻度で1200個の数値を4時間かけて手打ちしてたのを3秒で終わらせるマクロ組んで改善提案→何かわからんけど組んだんだろ で300円
他のシートやブックに行き来しやすいように
図形に文字入れてハイパーリンクをセットしたのを2つ作った
→これはいいぞ 1000円
もう嫌だ >>905
改善提案出すとお金貰える仕組みの会社だから
トヨタグルーやトヨタ系とかは結構そうじゃないかな >>906
単にプレゼンというか説明下手なだけじゃないの? >>907
もうマクロに関してそこは諦めたわ
if関数使ったりそういう改善のが1000円や1500円で貰えるからそっちでいってる
同僚から組んで欲しいってのも全部断ってる
58歳のパソコンに疎すぎる人に説明する必要性もないかな まぁ、「実際の能率の向上」より「誰にでも分かりやすく使い易い」にウエイトが傾いてるってのはよくあることじゃね。
どんな評価方法か知らんけど。
・直接的に恩恵を受ける人の数
⇒あくまで例えばだが、>>904の「3秒マクロ」で仕事が楽になるのが数人しかいない、とか、
「図形2つ」が割と広い範囲で使える上に、他の職場でも応用が利く、とか。
・柔軟性
⇒例えば3秒マクロに何かしら元となるデータがあると仮定して、
そのデータを出力するシステムの仕様に変更があった場合対応できなくなる、とか。
他方、図形2つの方は文字どおり図形2つ作って文字入れてハイパーリンクを加えただけなので、
例えば参照先URLなりが変わったとしても、比較的対応が容易だし、
よほどのことがなければ「使えなくなる」ということが考えられない、とか。
・上司のその時の気分、あるいは好かれ具合
⇒それな >>908
同じような所が10カ所(ファイル)あったら10000円〜15000円もらえるのかな 相談もなしに勝手なマクロを組んだことで減点対象になったのだろう
もしかしたら、その作業は近々システムの変更でなくなる予定だったかもしれない
作業以外の目的があったのかもしれない
残業が多いなと思っていたら、
余計なものを作って遊んでいた、減給されないだけましだろう レス数が900を超えています。1000を超えると表示できなくなるよ。