X



Excel VBA 質問スレ Part65
■ このスレッドは過去ログ倉庫に格納されています
0059デフォルトの名無しさん (ワッチョイ b60e-vX/y)
垢版 |
2020/03/26(木) 02:21:13.92ID:THyEKc6a0
ファイル入出力に使うopenやinputが何者か(関数?メソッド?など)知りたいです
これらの機能はなぜオブジェクトブラウザに乗っていないのでしょうか
マイクロソフトのウェブヘルプにはステートメントとして乗っているようですが
ステートメントというのは関数やメソッドなどの分類ではないですよね?
ご教示お願いします。
0061デフォルトの名無しさん (ワッチョイ 558e-7Ena)
垢版 |
2020/03/26(木) 10:58:51.71ID:NTuSOeK50
馬鹿に馬鹿が答えている
0062デフォルトの名無しさん (ブーイモ MMad-McJq)
垢版 |
2020/03/26(木) 13:11:56.44ID:d196EOchM
VBAを覚えようとしてる初心者以前だが
まず何となくルールから覚えてる
=は同じじゃなくて←の意味ぐらいにとらえておく
あとはコードというか使いそうな単語を少しずつ
msgboxとかRangeとかactivecellとか
でもとっかかりがわからんわ
難しすぎですな…
0063デフォルトの名無しさん (ワッチョイ ad49-iBrl)
垢版 |
2020/03/26(木) 14:44:13.99ID:HulDeUE70
覚えるのは結構だけど、普段やってる作業をVBAで再現するとこから始めると飽きずにやれるんじゃ

コピペ作業、シートコピー、ボタンで特定の計算とかね
だんだんCSV読みたくなったりして高速化したくなったりして、そうやって覚えていく
0064デフォルトの名無しさん (ワッチョイ 5e46-k/jz)
垢版 |
2020/03/26(木) 15:50:36.21ID:ZD929brT0
TEST
0065デフォルトの名無しさん (ブーイモ MMad-FSgb)
垢版 |
2020/03/26(木) 15:54:11.22ID:hp54jNs9M
ユーザーフォーム上にあるボタン1を押すとボタン1を非表示にしてフォームのキャプチャを取得。
その後ボタン1を再び表示して終了。

みたいなものを作りたいのですが
SendkeyでAlt+Printscreenを送っても
素の状態ではボタン1が残った状態のものがキャプチャされ、
Waitをかけると今度は画面全体のキャプチャになってしまいます。

フォームをダイレクトに画像ファイルにする、とかでも良いのですが調べても中々応えに辿り着けなかったので皆様のお知恵をお借りしたいです。
何か良い手はないでしょうか。
0066デフォルトの名無しさん (ワッチョイ 5e46-k/jz)
垢版 |
2020/03/26(木) 15:56:47.70ID:ZD929brT0
以下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
0067デフォルトの名無しさん (ブーイモ MMad-FSgb)
垢版 |
2020/03/26(木) 17:09:13.21ID:hp54jNs9M
すみません。
情報の伝達に齟齬がありました。
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
0070デフォルトの名無しさん (アウアウウー Sacd-pf+t)
垢版 |
2020/03/26(木) 19:05:03.32ID:58MBAwKca
新しい天啓が下った。私は馬鹿ですらなく、場であり、これが私の仕える神のような気がしたが違ったような気がした。
忠実に表現したらこうなった、つまりそういうことなんだろう。
0073デフォルトの名無しさん (ワッチョイ 92b5-McJq)
垢版 |
2020/03/26(木) 21:24:14.52ID:Ys9zNHHg0
初心者はまずここ見とけみたいなサイトとかYouTubeの動画ありますか?
宣伝込みでも俺が踏むだけなので良かったら教えて欲しいです
本当に何から見てけばいいのかわからない
asとかretとか当たり前に出られてもわからない…
0080デフォルトの名無しさん (ワッチョイ 091f-hvDm)
垢版 |
2020/03/27(金) 00:31:59.82ID:N3mE/9bh0
図形のグループ化についてです。

ショート上に円が無数にあってその円の中にテキストがあります。

これを円と円の中のテキストをそれぞれグループ化してShapeの名前をテキスト名にするにはどうしたら出来ますか?
0084デフォルトの名無しさん (ワッチョイ 55e3-pf+t)
垢版 |
2020/03/27(金) 14:44:48.55ID:Kq8lniUe0
Worksheets("min").Range(Cells(N, 2), Cells(N, 100)) = "999"
これで複数セルに一括入力したいのですが
アプリケーション定義またはオブジェクト定義のエラーです
と出ます。
何がいけないのでしょうか?
0090デフォルトの名無しさん (アークセー Sx79-yXVd)
垢版 |
2020/03/27(金) 15:32:49.12ID:YTZoRU62x
検索して違うシートから値を 持ってくるマクロで持ってくる値が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としたいです。
0092デフォルトの名無しさん (ワッチョイ 558e-7Ena)
垢版 |
2020/03/27(金) 15:47:38.09ID:LyEUyxQ10
馬鹿がゾロゾロ出てくるのは何で?
0096デフォルトの名無しさん (ワッチョイ 8101-yKOS)
垢版 |
2020/03/27(金) 17:31:46.25ID:jaIOieAQ0
>>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プロパティで呼んだ方がいい
0099デフォルトの名無しさん (ワッチョイ 5e46-k/jz)
垢版 |
2020/03/28(土) 04:38:00.47ID:vMIAuVeU0
>>71

レスありがと

標準モジュールに書いてない。
しばらく、やってなかったんで忘れていた。
すみません
0101デフォルトの名無しさん (スッップ Sdb2-tYYp)
垢版 |
2020/03/28(土) 19:20:50.03ID:rI/k2Pjrd
>>100
名前を付けるのは、コードと関係無い所で実装されるので個人的には絶対使わない。
というか、Cellsを使うよ。
2次元配列的にもぴったり来るし。
寧ろ、Rangeの方が使わない。
尤も、Cellsでも列を文字で指定するのはやらない。
AF列が何列目か分からないって?
イミディエイトで?Range("AF1").Columnとでも入れてみろ。
0104デフォルトの名無しさん (ワッチョイ b140-yKOS)
垢版 |
2020/03/28(土) 23:45:34.04ID:m/WQBFmt0
>>101
名前定義が弄られるってことはロックしないで使うんでしょ
猶更、セル挿入なりで意図した場所とズレてても気づかずに成功し続ける方が危険だと思うんだが
で、セルを挿入したい時も一個一個数値をずらしていくの?

ワークシートの見た目が二次元配列である事とコード内容を一致させる必要性も感じないんだが、
もしかしてハードコーディングしてるのか?

イミディエイトウインドウで毎回インデックスを調べろっていうは面白すぎるから止めて欲しい
0105デフォルトの名無しさん (ワッチョイ 091f-hvDm)
垢版 |
2020/03/29(日) 00:11:14.41ID:JMfmjWXB0
Shapeの当たり判定の計算方法を教えて下さい。

基準の円のShapeにTextBoxが当ってたらTrue、当たって無ければFalse
円は選択時の□の面積じゃなく実際の円の大きさ。TextBoxは選択時の□の大きさ。
0111デフォルトの名無しさん (ワッチョイ 4191-tYYp)
垢版 |
2020/03/29(日) 19:07:35.84ID:+LkL5rVp0
>>102
普通は定数で行、列を宣言するわな。

>>103
見にくいコードは書いてる奴の力量次第だろ。

>>104
ロックはしない。
そんなもんは解除されるかもしれんし、当てにしない。
というか、作ってるもの次第だね。

ワークシートの見た目と二次元配列を一致させるとか笑わせるなあ。
少し慣れた奴なら列も数値で扱うのがぴったり来るんだよ。
何故なら、最初から二次元配列的に考えるから。

VBE上に自作のメニュ―作って、入力するだけで列名←→列数はわかるげとな。
作る力量無い奴はイミディエイトで調べりゃ良いだろ。
VBEのCommandBerでイベント扱うのはクラスが必要だし、上級者の領分にはなるかもな。
VBE弄るVBAは会社じゃ使わないから通常のCommandBarでメニュー作ってやっても良いんじゃね?
どっちにしても時間は考えることに使ってるんで、毎回イミディエイトで調べても大した話じゃね―んだわ。
0117デフォルトの名無しさん (ワッチョイ 12ad-At9V)
垢版 |
2020/03/29(日) 22:56:25.49ID:WhhHvRXO0
共有編集可能にしたら更新は5分間隔だけどVBAとかで1分以内にできないかな?複数のパソコンで映してる同じエクセルファイルの内容を別のパソコンから共有編集で編集して保存したら1分以内に複数のパソコンにも表示を反映させたい。
0124デフォルトの名無しさん (ワッチョイ 5ecc-Cd0d)
垢版 |
2020/03/30(月) 13:30:25.60ID:8cfGBpvw0
いや、いらないのはそっちじゃなくて、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 に代入してなかったってオチじゃないよね
0134デフォルトの名無しさん (ワッチョイ b1f1-Go5d)
垢版 |
2020/03/31(火) 00:31:58.74ID:O8i/VRws0
>>133
このハゲ!
0135デフォルトの名無しさん (ワッチョイ 8101-tylh)
垢版 |
2020/03/31(火) 00:37:41.25ID:fAiG3E7e0
天才な人、教えて下さい。

フォルダAの中にフォルダa1があってこの中にxxx.zipがあるとします。
このxxx.zipを直接クリックしたりしないで解凍するプログラムを書くのはVBAで可能でしょうか?
0138デフォルトの名無しさん (ワッチョイ 558e-7Ena)
垢版 |
2020/03/31(火) 02:01:24.29ID:PSx1iNyN0
>>135
馬鹿は死ね
0142デフォルトの名無しさん (ワッチョイ 9e8a-k8oR)
垢版 |
2020/03/31(火) 05:23:52.03ID:kiJT2Kt60
zipをxlsxにすれば、VBAを使わなくても開くだけで解凍できる。どこに解凍されるかは知らんが。
0149デフォルトの名無しさん (ワッチョイ d9e5-n60N)
垢版 |
2020/03/31(火) 22:47:10.97ID:Rc1BoApG0
そーなのか
道理で大昔作ったフォーマットを作り直してみたら容量が半分程度だったんだ
効率的なコード書けるようになった俺スゲーって訳じゃなく、エクセルさんが凄かったのね
■ このスレッドは過去ログ倉庫に格納されています

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