Excel VBA 質問スレ Part65
■ このスレッドは過去ログ倉庫に格納されています
ExcelのVBAに関する質問スレです コード書き込みや作成依頼もOK ※前スレ Excel VBA 質問スレ Part64 https://mevius.5ch.net/test/read.cgi/tech/1575297834/ VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured ファイル入出力に使うopenやinputが何者か(関数?メソッド?など)知りたいです これらの機能はなぜオブジェクトブラウザに乗っていないのでしょうか マイクロソフトのウェブヘルプにはステートメントとして乗っているようですが ステートメントというのは関数やメソッドなどの分類ではないですよね? ご教示お願いします。 >>59 ステートメントというのは関数の祖先にあたる概念 コンピューター言語が発明された初期からある命令文の分類の一つ VBAを覚えようとしてる初心者以前だが まず何となくルールから覚えてる =は同じじゃなくて←の意味ぐらいにとらえておく あとはコードというか使いそうな単語を少しずつ msgboxとかRangeとかactivecellとか でもとっかかりがわからんわ 難しすぎですな… 覚えるのは結構だけど、普段やってる作業をVBAで再現するとこから始めると飽きずにやれるんじゃ コピペ作業、シートコピー、ボタンで特定の計算とかね だんだんCSV読みたくなったりして高速化したくなったりして、そうやって覚えていく ユーザーフォーム上にあるボタン1を押すとボタン1を非表示にしてフォームのキャプチャを取得。 その後ボタン1を再び表示して終了。 みたいなものを作りたいのですが SendkeyでAlt+Printscreenを送っても 素の状態ではボタン1が残った状態のものがキャプチャされ、 Waitをかけると今度は画面全体のキャプチャになってしまいます。 フォームをダイレクトに画像ファイルにする、とかでも良いのですが調べても中々応えに辿り着けなかったので皆様のお知恵をお借りしたいです。 何か良い手はないでしょうか。 以下RUNすると、"!ALARM()が見つかりません。”ってエラーになる。 何故ですか? Public FLG As Integer Private Sub CommandButton1_Click() With Sheet1 Cells(2, 1) = Date Cells(2, 2) = Time If FLG = 1 Then FLG = 0 CommandButton1.Caption = "ON" Else FLG = 1 CommandButton1.Caption = "OFF" Call OnTimeStart End If End With FLG = 0 End Sub Sub OnTimeStart() With Sheet1 Application.OnTime Now + TimeValue("00:00:05"), "ALARM" End With End Sub Sub ALARM() With Sheet1 Cells(2, 1) = Date Cells(2, 2) = Time End With End Sub すみません。 情報の伝達に齟齬がありました。 Sendkeyではなくkeybd_eventsでした。 Altのkeyeventをコメントアウトしたら何故かフォームだけのスクリーンショットが撮れました。 vbKeySnapshotはAlt+PrintScreenだったのでしょうか? Private Sub CommandButton1_Click() UserForm1.CommandButton1.Visible = False 'keybd_event vbKeyMenu, 1, &H1, 0 keybd_event vbKeySnapshot, 1, &H1, 0 Application.Wait [Now() + "0:00:00.5"] keybd_event vbKeySnapshot, 1, &H1 Or &H2, 0 'keybd_event vbKeyMenu, 1, &H1 Or &H2, 0 UserForm1.CommandButton1.Visible = True End Sub 使えるけどwindowsと全く同じように動くかまでは知らん 新しい天啓が下った。私は馬鹿ですらなく、場であり、これが私の仕える神のような気がしたが違ったような気がした。 忠実に表現したらこうなった、つまりそういうことなんだろう。 WEBクエリはhttpsだと遅いすか? そうなったサイトが急に読み込み遅くなったんすけど 初心者はまずここ見とけみたいなサイトとかYouTubeの動画ありますか? 宣伝込みでも俺が踏むだけなので良かったら教えて欲しいです 本当に何から見てけばいいのかわからない asとかretとか当たり前に出られてもわからない… >>73 動画でプログラミングを覚えるのはとても難しい エクセルの使い方や開発環境の整備とかなら分かるけど 言語を覚えるのは本を読んでコードを書く方が早いだろう >>75 >>76 ありがとう とりあえず、マクロからあるURLやoffice系のソフトを呼び出すコードをネットから丸パクリしてみたんだけど結局これが良いのか悪いのかそもそもルールすらあまりわかってない サイトや本で必死に勉強しますわ https://i.imgur.com/Llw26vN.jpg https://i.imgur.com/CEIjgGb.jpg 図形のグループ化についてです。 ショート上に円が無数にあってその円の中にテキストがあります。 これを円と円の中のテキストをそれぞれグループ化してShapeの名前をテキスト名にするにはどうしたら出来ますか? >>80 グループ化はGroupメソッドを使う For Eachを使えば図形がいくつあっても関係なく同じようにできる 図形をVBAで複雑にいじろうとすると悲しみしか生まなさそう Worksheets("min").Range(Cells(N, 2), Cells(N, 100)) = "999" これで複数セルに一括入力したいのですが アプリケーション定義またはオブジェクト定義のエラーです と出ます。 何がいけないのでしょうか? With Worksheets("min") .Range(.Cells(1, 1), .Cells(20, 2)) = "999" End With できました^^ありがとう 検索して違うシートから値を 持ってくるマクロで持ってくる値が0以下(マイナス)ならば 違う列に転記させたいのですがwithエラーが発生してうまく動きませんでした。 Dim i As Long, c As Range, e As Range, wS As Worksheet Set wS1 = Worksheets("明細1") With Worksheets("data") Set c = wS1.Range("D:D").Find(What:=.Cells(i, "B"), LookIn:=xlValues, LookAt:=xlWhole) If Not c Is Nothing and wS1.Cells(c.Row, "Z").value < 0 Then ←ここでエラー .Cells(i, "V") = wS1.Cells(c.Row, "Q") ElsIf Not c Is Nothing and wS1.Cells(c.Row, "Z").value >= 0 Then .Cells(i, "X") = wS1.Cells(c.Row, "Q") またマイナス値をプラス値に変換したく .Cells(i, "S") = abs(Cells(i, "S")) としましたが小数点が消えてしまいます。 -77.00が77になってしまうのですが77.00としたいです。 >>91 If wS1.Cells(c.Row, "Z").value < 0 Thenでもエラーが出ます With Worksheets("data")が邪魔をしてるとかですか? >>94 VBAは関数や演算子の引数は全て渡される前に値を計算するんだよ だから Not c Is Nothing が真じゃないときは wS1.Cells(c.Row, "Z").value < 0 を評価しないように if Not c Is Nothing then if wS1.Cells(c.Row, "Z").value < 0 then ... としないといけない あとCellsプロパティは見にくいんで範囲に名前つけるかテーブル化してRangeプロパティで呼んだ方がいい 範囲に名前はなぁ・・。 上手く使いこなせればいいが、 みんなで共有するファイルに使うと、 知らない間に#REFだらけになってるwwww >>71 レスありがと 標準モジュールに書いてない。 しばらく、やってなかったんで忘れていた。 すみません >>98 異常時に例外が投げられるように設計するのは普通だと思うんだが・・・ >>100 名前を付けるのは、コードと関係無い所で実装されるので個人的には絶対使わない。 というか、Cellsを使うよ。 2次元配列的にもぴったり来るし。 寧ろ、Rangeの方が使わない。 尤も、Cellsでも列を文字で指定するのはやらない。 AF列が何列目か分からないって? イミディエイトで?Range("AF1").Columnとでも入れてみろ。 >>101 で、コメントで何列かとか、項目名とか書くわけ? >>96 >>101 名前を付ける派 可読性が高い方が良い VBAは見にくいコードが多い >>101 名前定義が弄られるってことはロックしないで使うんでしょ 猶更、セル挿入なりで意図した場所とズレてても気づかずに成功し続ける方が危険だと思うんだが で、セルを挿入したい時も一個一個数値をずらしていくの? ワークシートの見た目が二次元配列である事とコード内容を一致させる必要性も感じないんだが、 もしかしてハードコーディングしてるのか? イミディエイトウインドウで毎回インデックスを調べろっていうは面白すぎるから止めて欲しい Shapeの当たり判定の計算方法を教えて下さい。 基準の円のShapeにTextBoxが当ってたらTrue、当たって無ければFalse 円は選択時の□の面積じゃなく実際の円の大きさ。TextBoxは選択時の□の大きさ。 >>105 表示位置とサイズから比較したらいいんじゃね 当たり判定だからゲームじゃないの? Corei世代でも60fpsでないから使いたくないけど。 >>105 専用の関数などは用意されてないので、TextBoxの頂点と円の座標を比較したり、円の中心からの距離を三角関数で計算して調べるしかない VBAであえてゲーム作ったりするのは 芸ではあるけど開発効率的に筋は悪いよね グラフィックにこだわるなら別言語推奨 >>102 普通は定数で行、列を宣言するわな。 >>103 見にくいコードは書いてる奴の力量次第だろ。 >>104 ロックはしない。 そんなもんは解除されるかもしれんし、当てにしない。 というか、作ってるもの次第だね。 ワークシートの見た目と二次元配列を一致させるとか笑わせるなあ。 少し慣れた奴なら列も数値で扱うのがぴったり来るんだよ。 何故なら、最初から二次元配列的に考えるから。 VBE上に自作のメニュ―作って、入力するだけで列名←→列数はわかるげとな。 作る力量無い奴はイミディエイトで調べりゃ良いだろ。 VBEのCommandBerでイベント扱うのはクラスが必要だし、上級者の領分にはなるかもな。 VBE弄るVBAは会社じゃ使わないから通常のCommandBarでメニュー作ってやっても良いんじゃね? どっちにしても時間は考えることに使ってるんで、毎回イミディエイトで調べても大した話じゃね―んだわ。 >>63 今の若いヤツらはそういう説明じゃ200%挫折する。普段の業務を自動化っていう感覚がわからないそう。やっぱスマホタブレット世代はPC=ワープロにしか思えんのかもな。 >>111 ロック外されたくないならパスワード付ければいいじゃん >>111 > VBE上に自作のメニュ―作って、入力するだけで列名←→列数はわかるげとな。 まさか自慢じゃないよね?w 傍から見てたら馬鹿なことしてるなとしか思えんし 共有編集可能にしたら更新は5分間隔だけどVBAとかで1分以内にできないかな?複数のパソコンで映してる同じエクセルファイルの内容を別のパソコンから共有編集で編集して保存したら1分以内に複数のパソコンにも表示を反映させたい。 あ、どうせ、コピーしても意味ねぇよ。記憶してるのPCじゃねぇから。 考えまとめるためにPC使ってるだけ、ただそれだけなんだよ。 >>116 君にできないからと言って、そんなもんが自慢になると思うかね? >>120 日本語の理解力がないのかな? 自慢にもならないことをいちいち書くとかバカじゃね? って言う事な >>121 wS1.Cells(c.Row, "Z").value < 0 そもそもこれ必要? いや、いらないのはそっちじゃなくて、ElseIf〜 のIf〜Then If Not c Is Nothing Then If wS1.Cells(c.Row,"Z").value<0 Then .Cells(i, "V") = wS1.Cells(c.Row, "Q") Else .Cells(i, "X") = wS1.Cells(c.Row, "Q") Endif Endif でいいはず エラーが出たのが実は一つ上の行で、i に代入してなかったってオチじゃないよね >>122 悔しいからって一々反応しなくて良いんだぞwww どこで受けたストレスをここで発散してるんだろう・・・ ここの人等は本当にきついね 一部だけかもしれんけど 他スレ建ててもどうせそこにやってくるし困ったもんだ いいから質問しろよ 俺が優越感感じられるように割と簡単なやつな 天才な人、教えて下さい。 フォルダAの中にフォルダa1があってこの中にxxx.zipがあるとします。 このxxx.zipを直接クリックしたりしないで解凍するプログラムを書くのはVBAで可能でしょうか? たまたま知ってたけど天才じゃないから教えられない 残念です 無念です 俺も天才じゃないんだわ いるんか?このスレに、天才が >>135 「powershell zip 解凍」で検索! zipをxlsxにすれば、VBAを使わなくても開くだけで解凍できる。どこに解凍されるかは知らんが。 >>126 zip解凍ぐらい大して難しく無いんだから答えてあげたら? >>143 既に>>139 で答えられてるだろ スレの流れも追えないのか?w >>141 VBA 共有編集でググレば参考になる所が出てくる。 そういやxlsxがそもそもzipファイルなんだよな そーなのか 道理で大昔作ったフォーマットを作り直してみたら容量が半分程度だったんだ 効率的なコード書けるようになった俺スゲーって訳じゃなく、エクセルさんが凄かったのね 拡張子zipにして展開すると画像ファイル取り出せるしな ネットでこんな素晴らしい物を見つけたんだけれども、これがデータ量が多いと結構時間掛かるんだけど、高速で図形として書き出す方法って他にありませんか? http://izawa-web.com/excelbcad/dxfreader.html >>156 CADアプリで画像にでも変換してシートに貼り付けた方が早くて綺麗 オートシェイプに変換すると重くなるし比率が狂うし、メリットがなさすぎる ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.4 2024/05/19 Walang Kapalit ★ | Donguri System Team 5ちゃんねる