Excel VBA 質問スレ Part66
■ このスレッドは過去ログ倉庫に格納されています
ExcelのVBAに関する質問スレです コード書き込みや作成依頼もOK ※前スレ Excel VBA 質問スレ Part65 https://mevius.5ch.net/test/read.cgi/tech/1584430040/ ※デフォルト設定 そもそも高精度タイマーつかわんと、標準のタイマーで1msは無理なんだが >>25 ブレてんじゃんww できる奴なんだろ? じゃないなら「私の"何通り"には1つでも含まれますごめんなさいもうしません」って謝れよww あとコード付で答えたことないこともなw >出来る奴は瞬時に何通りかは思いつく。 >バカと違って質問の意味が分かってる人はこういう答えになるから何通り等の方法等とならないことを知っている。 >内容によって3通りになる場合もあれば5通りになる場合もある。 >それに最適と考える1通りの場合だってある。 お前はVBAならintもint()も同一視するのかよww 素人めw 1個か3個か5個か、断言も出来ない臆病者めww >>25 言い訳がましいんだよなww >最初から具体的に何通りなどと想定していない発言だ。 →普通ツッコまれるから想定するんだよなあw >内容によって3通りになる場合もあれば5通りになる場合もある。 それに最適と考える1通りの場合だってある。 →最適は1つじゃないのかねww それとも要件がわからないから最適と言えませんぴえーんとか社会で言ってるのかww >←これがあるから「何通りかは思いつく」の発言で、「最適の1通りの場合もありうる」等と追加して全ての状況に対応する必要は無い。 →後だしで言い訳ww それまでずっと「何通りか」を固持してるのになww >お前の「ブレブレ」という単語の意味はどの辞書に載っているどういう意味なのか、そしてそういう説明をしていないからその不備をもって日本語が出来ていない等と突っ込むことなどという事態になってしまう。 →頭固いねえw日本語の由来とかにこだわって嫌われるタイプだろwwww そんなんだからずっとVBAおじさんなんだよw >しかし、お前の「・瞬時に5個思い付く(ドヤア)」は、「瞬時に5通り思いついたとして」の例示に対して、常に5通り思いつくと解釈したということだ。 →じゃあ「何通りか思いつく」は具体的に何個なんだよww 腹くくってきめろやww >>31 面白いよなww 仮に結論をそっちに寄せると、 今までの発言が全て、 「瞬時に思い付きます。でもそれは1通りでもあるし複数通りでもあるし、思い付かないかもしれません」 とかいう、「私は10年以上のベテラン(笑)だけど雑魚です」って告白するような発言になるんだぜww こんなちょろいやつ初めてだわw サンプルコードも出せないわけですわww >>31 だからどこがブレてんだよwww さっさと指摘しろな。 最初から場合によると言ってるがw お前はIf文やSelect文を使えないのか? >>32 www お前の考えだと頭が固くなるという話をしたのにw そんな頭の固い話じゃ会話にならねえと言ってる。 あいかわらず日本語が未熟だなw >>33 全てに対応したやり取りなんて出来ないし、誰もやってないと言ってるんだ。 お前も出来ていない。 まともな奴ならそういう前提で会話してる。 >>33 ところで、「・瞬時に5個思い付く(ドヤア)」が間違ってたことについては無視か? 触れて欲しくない? そういうわけにはいかんぞ。 散々迷惑かけてるんだからな。 >>34 VBA10年おじさん大発狂の4連投してて草 高血圧だな、体は大事にしろよw >だからどこがブレてんだよwww 自分が日本語分かってねえじゃねえかw 「場合による」は後だしだぞww何通りかは思い付くの時点で名言してるか?ww >お前の考えだと頭が固くなるという話をしたのにw お前のは表現のゆらぎじゃなくて、明確にずれてんだよw ほら、1個か3個か?臆病者めwww >全てに対応したやり取りなんて出来ないし、誰もやってないと言ってるんだ。 10年おじさんなら最適解出せるだろ?w 「瞬時に思い付きます。でもそれは1通りでもあるし複数通りでもあるし、思い付かないかもしれません。私は10年以上のベテラン(笑)だけど雑魚ですすいません」って告白してもいいぞw >ところで、「・瞬時に5個思い付く(ドヤア)」が間違ってたことについては無視か? 最初から何個か名言しない臆病者のせいで仮に特定してあげてるだけだよww お前のせいじゃんwww 5個のところ好きな数字にしろよww 数字特定したら次はほんとに「瞬時に思い付くか」テストしたげてもいいなw てか>>28 にも答えてないしなw 10年以上やってるのにww >>39 間違いを認めるか、間違って無い根拠を示せ。 逃げようとしてるのミエミエだぞw ↑もうこれを示さない限り先には進まん。 >>40 言い返せないことを認めた負け宣言あざっすww >>28 もわかんないんだもんなw よっわ、こりゃVBA10年おじさんだわww これに懲りたらてきとーなこと言ったり「10年以上前だけど(ドヤア)」とか言うの控えとけよww こうやって恥かくからなww あ、でもまた数年後思い出して修正するんでしたっけww こいつのプロダクトとかアウトプットは信用できないなww ここで教わった「空白になるまで」とか 「空白じゃなければ」 って言うのが自分の職場で凄い役に立って多用してますわ ケースによるんだろうけどこれが当たり前なのかあまり使わない方がいいのはわからない Sub 空白まで処理 () Dim gy As Long Do while cells(gy, 5) <> "" 何かの処理 gy = gy + 1 loop End Sub Sub 作成者を入力させる () Dim Ib As String Ib = Inputbox ("フルネームで入力して下さい","作成者","") If Ib <>"" Then Range("A4").value = Ib Else Msgbox ("後で入力して下さい",vbokonly,"作成者欄") End If End Sub ここら辺とか職場で多用してたら俺です。 あと色々覚えて作ってて思うのが絶望的に変数の名付け方にセンスが無い… データ型は深く覚えなくてもいいってサイトで見たけどVbMsgBoxResultとか前スレで教えたくた人のおかげで役立ってるし多分覚えた方がいいデータ型も結構あるんだろうなぁと if文ってスゲー便利!って言ってるのと変わらんぞ 条件ループなんてプログラミング言語として最低限の必須機能 >>45 変わらんぞというかまさにそこに感動してるレベルの入門者ですよ ただ毎日コードを何かしら書かないとすぐ忘れ書き方のルールを忘れちゃいますわ ある程度多用する基本的なコードは自分でテンプレ作ってそこから引用してるから 必要なコードは必要な時だけそこから引っ張れば良いという人ももいたけどやっぱこのマクロ作ろうと思ってカタカタと悩まずに打って作れるようになりたいですね >>44 繰り返しの内側やIF文の内側ではインデント(字下げ)すると読みやすくなる あと個人的には変数宣言(Dim)の下に空行入れてる システムにお願いしても駄目ならプロセスのプライオリティを 思い切り上げて他のプロセスをできるだけ起動させないとか。 >>44 書けないとか忘れるなんて言ってるけどただのネタだろ? 普通にコピペしたら Msgbox とはならない 自動的に MsgBox に修正されるからな >>49 いや、ここでのレスは手打ちだよ そのぐらい練習癖つけないと忘れちゃう とにかく体に無意識に覚えさせたい は?手打ちならVBEに入力しなきゃ意味ないだろう それとも常時Excelに触ることができない環境でイメージトレーニングでもしているの? それならキーボードじゃなくて手書きをお勧めするよ いやVBE触りながらスマホで2ちゃんもやってるんよ 家帰ってダラダラしたいのに勉強しなきゃという強迫観念すらあるんですわ そのぐらい使いこなせるようになりたひ >>41 逃げるのかねwww 間違いを認めるか、間違って無い根拠を示せ。 へー、スマホで打ち込んだのか スゲーな 尊敬するわ スマホは本当に入力がむずかしい iphoneだけど、@ とか ? とか ; とか、 半角と全角を見分ける方法ないですかね >>41 なんだ、敗走か? 言い返せなくなると敗走? 「・瞬時に5個思い付く(ドヤア)」が間違ってたことに反論出来なくて敗走? >>58 俺より馬鹿じゃないから気にしなくて良いよ! VBA7以前でPtrSafe付コードを修正する際にコンパイルエラーを避けるには、該当箇所を一つずつコメントアウトしないといけないのでしょうか '変数cに列番号が記録されており、その右隣の列から右に向かって最終列(変数LastCol)までに一つ目の文字列"型式"がある1つ手前の列番号を変数ccに記録したいのですが、これであってますか? cc = Range( c : LastCol ).Find("型式").Columns - 1 検索条件が甘いのと見つかんないとエラーが出るのが問題だけど cc = Range(Columns(c + 1), Columns(LastCol)).Find("型式").Column - 1 >>41 結局、勝ち負けだけで論理的に正しい間違いはどうでも良い奴だったな。 こういう奴は確かに拘ることをしないからいつまでたっても初心者を脱っすることが出来ない。 実際には言い負かされてるんだが言い負かされなかった形だけあれば満足すると。 こういう糞がどこで自尊心を保っているのか全く理解出来んw 基地外同士のケンカがやっと終わったか 最初に引いた奴の方が偉いな はい次の方 ネットで拾ったコードをつぎはぎ足してoffice2010のExcelで使ってたけど 今年会社がやっと2019に上げるらしい 使えなくなるコードがあったら終わるわ 32bit→64bitならエラーが出るかもだが、それ以外は特に変更はないはず クラス化して再利用考えて作ってたのですが、getter経由で取得したデータを処理したり、ボタン関係の養生したり、フォームに描画反映したりでユーザーフォームにコードが集中してしまいました 構造が悪いのでしょうか ユーザーフォーム -ボタンイベントコールバッククラス -シートのデータ書き換えクラス -割込タイマークラス -シリアル機器インターフェースクラス --各機器のラッパークラス ---COMポートクラス >>75 何でクラス化したのにフォームに集中するの? 寧ろクラスに分割されるんじゃなくて? >>75 単純にGetter以外のメソッドを実装すればいいのでは? ユーザーフォームは俺のようなVBA超初心者にとって憧れだわ ある程度マクロ作ったら とりあえずThisWorkbookのとこで Private sub Workbook_Open() UserForm1. Show End Sub を作って ユーザーフォームのShowModalをFalseにする ↓ で使えるのはコマンドボタンという… ボタンクリックに標準モジュールで作ったプロシージャ名を貼り付けると… 毎回これじゃそりゃ上達しないわ もっとコード覚えて効率的な高見を目指したいところだけど脳がついていかない >>80 いや、流石にこれじゃいかんわ情けないと自覚 標準モジュールにあるプロシージャが自作のコードならまだしもマクロの記録を無駄な動きだけ消して貼り付けたりネットのをパクって少しいじったりするだけ ユーザーフォームもコマンドボタン以外に使い方わからず使ってないし CSVやtxtを読み込んだりとかそういう特殊な事書ける人は凄いわ 若い頃から情報システムとかそういう勉強すればよかったわ 英語 資格 PCスキルの時代は変わらんね >>76 >>77 ポーリングしてる機器Aの状態に応じて機器B、Cに異なるコマンドを送ってデータを取得する様な処理が何通りか合って多くなってます。インターフェースクラスとの間に処理クラスみたいなのを入れるのでしょうか >>82 データの取得をクエリサービスクラスに分離してください フォームクラスはフォーム自身の管理とサービスの呼び出しだけを行うものです >>81 今はボタン使うマクロしか作る予定がないだけだと思うが。 csvを使うマクロが必要になった時に調べるだろうし、 今は知らないからって自虐的になる必要ないんでは? >>82 一般的にオブジェクト指向は「最終的にやらせたいこと(=やれること)」をメソッドとしてクラスに定義にして、 そのための条件や必要なデータなどはクラス自体が判断したり取得したりするか、引数として与える もし、Getter等でデータをメインルーチンに集めて統合的に処理するなら従来の手続き型になる 今回の例で言えば、 機器BCからから受け取ったデータを処理するPublicメソッドを定義したクラスを作って 機器Aに応じて機器BCにコマンドを送ったりっていった処理は、そのクラス内でやるのがいいかも ExcelフォームにExcelグリッドコントロールがあればむてきだたかもしれない 割り込みとかコールバックとかわからないシロートの発想で笑える >>84 CSVを扱う必要性がじりじり迫ってるんだけどネットにあるコードの窃盗常習犯で覚える脳みそがないからノースキル野郎 当然モチベもないから全然進んでない @ダイアログで任意のCSVデータを選択して それを今開いているシートに読み込まれる(CSVデータは読み込んだ後に自動で閉じる) (元々シートにグラフがあるがそれはそのまま) Aこのシートをブック内の一番右にシートをコピー 多分Aはどこかで拾えそうだけど@のプロシージャがありそうでなかなかネットから盗めず激ムズ ここの勉強できる人達は勝ち組だよ 非表示のシートがいくつかある状態で、一番右端のシートをアクティブにしたいのですが、worksheets.countで取得しようとすると、非表示のシートが選択されてしまいます 表示されているシートの一番右端をアクティブにするにはどうすればいいですか? 質問がおかしかったので書き直します マクロブックでなくアドインでやっています 一番右端のシートから値を取ってきて、その後に作成する新規のシートに貼り付けたいです Sheets(WorkSheets.Count).Activateで、表示上の一番右端のシートをアクティブにすることはできるのですが、操作ができません 非表示のシートがいくつかあり、シート番号は若くてもそちらがWorkSheets.Countで選ばれているようで、値はそこから取ってきてしまっているみたいです エクセルの表示上のシートの並びで、一番右端を選択してそこから値を取りたいのですが、どうすればいいでしょうか? For i = Worksheets.Count To 1 Step - 1 If Worksheets(i).Visible Then Worksheets(i).Activate Exit For End If Next >>91 あー、なるほど カウントを減らしていって最初にヒットしたVisibleでループを抜ければいいんですね 助かりました、ありがとうございます シート1にラベルやタイトルや色を設定した 雛型になるグラフがあって それをアクティブなシートにコピーして貼り付けられる事コード、もし出来れば教えて下さい。 今はシート1に戻ってグラフをコピーして 貼りたいシートに戻って貼り付け をやってます 数値は反映させなくて雛形になるグラフをとにかくすぐにアクティブなシートに持ってきたいです マクロの記録でもやり方わからずです… シート1にある("グラフ1")というのを アクティブなシートに貼り付け、わかりませぬ Ruby なんか、こういう感じで、CSV ファイルを1行ずつ処理していくだけ。 GUI で処理すると、Rubyよりも何倍も難しい require 'csv' file_path = ARGV[ 0 ] # 引数には、ファイルパスを渡す。input.csv # CSV ファイルを、1行ずつ処理する CSV.foreach( file_path ) do |row| puts "#{ row[ "col_1" ] } : #{ row[ "col_2" ] }" # 列1・列2 end シート1にあるグラフ1をアクティブシートにコピペ 調べてみたところ結局俺がやりたいのはシンプルにこれか マクロの記録だと限界あるわ。 Sub 数値反転() Dim ms As VbMsgBoxResult Dim gg As Long ms = MsgBox("マイナス値?", vbYesNo, "B列C列を確認") If ms = vbYes Then gg = 113 Do While Cells(gg, 2) <> "" Cells(gg, 17) = Cells(gg, 2) * -1 Cells(gg, 18) = Cells(gg, 3) * -1 gg = gg + 1 Else Do While Cells(gg, 2) <> "" Cells(gg, 17) = Cells(gg, 2) Cells(gg, 18) = Cells(gg, 3) gg = gg + 1 Loop End If End Sub ドヤ顔でいけるだろと思ったらnoを選択するとElseの次のDo whileのところでエラーになりますけどどう手直ししたらいいですか >>97 レスした後にvbnoの時のgg入れ忘れてたと思ってElseの後に gg=113を入れたけどやっぱりエラーになりました 根本的にルールが間違ってます? 1つめの Do while に対応する Loop がない >>99 ほんと恥ずかしすぎるミスでした。 ありがとうございます。 間違っといてなんだけど自分の考え方が間違ってない事もわかってホッとしました。 何言ってんだこいつと思われて当然ですがそんな気持ちです >>100 そもそもそれ以前に馬鹿過ぎて話にならない VSのエディタなら勝手にやってくれるけどExcelVBEはそこまで親切じゃないから、 ・Doと書いたら、中間の処理書く前にLoopをセットで先に書く。 ・中間の処理はインデント付ける こうしないと長い処理だとミスる。 田中先生ユーチューバーになってたんか。 エクセル系ユーチューバーは前からいるけど 彼らのチャンネル登録者数どんどん抜いてくな。 マクロ以外にもエクセルの機能全般もアップしてるし 他のエクセルユーチューバ―はもう躍進することはないな。 ご愁傷さま。 インデントしてるとVBEが勝手に空行にもインデント用スペースいれやがる マクロの処理だけmsオーダーで止めて、シートでの作業には影響させない方法ってありますか? sleepやapplication.waitを使うと、止めている間はマウスポインタが待機中に切り替わって気が散ります。 DoEvents を定期的に入れてあげて妥協するのがいいのでは waitが長いと入力作業とかできんだろうな マルチスレッドできたっけ? >msオーダー ジェイッ、ジェイッ、ジェイッ、ジェイッwwww >>107 俺もわからん。 どういう意味だろう。 あーミリ秒指定でマクロを止めたいってことか? それでもまだわからん せめてmsecオーダーと書けばわかりやすいのに しかも100ミリとかじゃないか?数ミリは気づかないはず GetInputStateとDoEventsでどうにかできんか >>110 マルチプロセスならできそうな気がしない? 知らんけど [現象] excelの vbaエディタで、フォントの設定が出来なくなった。 ツール−オプション−エディタの設定を選択すると、excelが強制終了してしまう。 [環境] windows10 pro office personal 2019 [発生時の操作] エディタの設定を、MSpゴシックから、 Ricty Diminished(Ricty Diminished Discordだったかも) に変更した直後から発生するようになった。 http://blog.higty.xyz/post/vbe-setting-error/ https://www.moug.net/tech/exvba/0150130.html ここを見ましたが、レジストリキー:HKEY_CURRENT_USER\Software\Microsoft\VBA\7.1\Common が存在しません。 よろしくお願いします >>119 ワークシートのページレイアウトからテーマは変更できる? >>121 はいできますがそれでは解決しないのです >>123 まずレジストリのVBA\7.1\Commonが存在しないことが異常だから、Excelを再インストールするのが一番の早道な気がする >>121 123 は私の書き込みではないのですが、レイアウトを変更して何かファイルを保存すれば レジストリキーが作成されるということかと思い試しましたが、作成されませんでした >>124 やはりそれしかないですかね。 >>125 ×レイアウトを変更して ○テーマを変更して >>104 萩原をおぎわらって読んだりIndirectをインディレクトって言ってたから そっ閉じしたわ。 インストロールと言ったら怒られたナリみたいなもんか。 奇天烈大百科が巻物だったら、まさしくインストロールだぞ ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.1 2024/04/28 Walang Kapalit ★ | Donguri System Team 5ちゃんねる