TOP カテ一覧 スレ一覧 100〜終まで 2ch元 削除依頼
C++/TemplateMetaProgramming
人工知能ディープラーニング機械学習のための数学
日下部陽一著 作ってわかるCプログラミング(第6版)
Rubyの設計上の欠点とは何か?
【C++】高速化手法【SSE】2
マルチプラットフォーム プログラミング言語 haXe
プログラミングのお題スレ Part14
テスト
ネットワークプログラミング雑談
サウンドプログラミング6

Excel VBA 質問スレ Part65


1 :2020/03/17 〜 最終レス :2020/04/20

ExcelのVBAに関する質問スレです
コード書き込みや作成依頼もOK

※前スレ
Excel VBA 質問スレ Part64
https://mevius.2ch.sc/test/read.cgi/tech/1575297834/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured

2 :
>>1

3 :
>>1

>全スレ998
挿入か貼り付けかはっきりしてくれ

4 :
行をコピーして挿入操作
マクロ記録したら、Selection.Copy Selection.iIsert Shift:=xlDown が出てきたけど普通に再生できたぞ

5 :
VBAからインターネットエクスプローラーを起動して、
指定したURLのサイトを表示して、
スクリーンショットを取って行く。
という作業を自動化したくて色んなサイトのコードをコピペして、
一応動くものは出来たのですが画質が悪いです。
下記はそのコードの一部分なんですが、どこをどういじれば
画質が良くなるのでしょうか。

Private Declare PtrSafe Sub keybd_event Lib "user32" ( _
 ByVal bVk As Byte, _
 ByVal bScan As Byte, _
 ByVal dwFlags As Long, _
 ByVal dwExtraInfo As Long)

・・・

 keybd_event &HA4, 0&, &H1, 0&
 keybd_event vbKeySnapshot, 0&, &H1, 0&
 keybd_event vbKeySnapshot, 0&, &H1 Or &H2, 0&
 keybd_event &HA4, 0&, &H1 Or &H2, 0&

6 :
プラウザのウィンドウサイズを大きくした後で画面キャプチャしたら
満足の行く画質になりました。
>>5の質問は撤回します。

7 :
>>4
まじすか
コピー元が別ブックだったのでそのせいかも

8 :
>>5
キーボードマクロ最悪

9 :
リボンを自動的に非表示にする設定だととクイックアクセスに登録したものも含めてコマンドがすべて隠れてしまうんだけど
特定のコマンドのみ表示させておく方法はないかな?
マクロとして登録させて画像にマクロを登録しようとしたけど動かない。

10 :
>>9
うちのExcel2016だと隠れないけど、それ以降だと違うのかな
リボンの下に表示offでもだめなら
フォーム作って、UserForm.ShowModal=False という手もあるよ

11 :
>>10
>>9
UserForm.ShowModal=False はどういう方法?

12 :
>>11
自作フォームをカスタマイズメニューに見立てて自作のマクロなどを呼び出す

13 :
>>12
マクロを呼び出すのは簡単なんだけど、各コマンド(既存の機能)をよびだすのかできない
たとえば描写とかペンとか消しゴム機能とか

14 :
既存の機能が必要ならリボンを非表示にしなきゃ良いんじゃね

15 :
>>13
SendKeys "% 〜

16 :
>>15
ショートカットキーを設定してってことかな?

17 :
csvを読む場合で、見出し行とデータ行が文字と数値で形式が違う場合とかどう処理しますか?

18 :
>>17
パワークエリで読み込んで任意のデータ型に変換する

19 :
>>17
CSVを読み込む場合にブックとして読み込むことはまず無い。
というか、まずテキストとして読み込む。
処理も何も、全て自由に出来るぞ。

20 :
>>17
全部文字として読み込む。コードで数値として処理したいならcintやcdblでキャストすればいい。因みにワークシート関数にはNumberValueってのがある。

21 :
あれなんとかならんかな。
NULLがあるとコケるから、
いちいちIIF(A IS NOT NULL, CINT(A))ってやらなきゃいけないの。

22 :
VBA で、セルの指定しても行の指定が無効になってて、必ず1行目に表示されてしまいます。
何が原因でしょうかね?
教えてください。

23 :
>>22
お前の馬鹿頭

24 :
原因わかりました。すみませんでした。

25 :
ここの住民の霊性は暴力団と同じですね

26 :
ここだけじゃなく2chはどこも似たり寄ったりです
貴方が来るような場所じゃありません

27 :
>>25
霊性?
馬鹿確定
原因としては正しかっただろうが

28 :
>>22
ソースコード書けないの?
君書いたのが本当にセルの指定をしてると信じる人がいるとでも?

29 :
よろしくお願いします。

数百行あるシートで、上から順に一行ずつ以下の操作を行いたいです。

(1) C列の文章の中に、「一言コメント:」という文字が入っていれば2へ。なければ終わり、次の行へ
(2) 「一言コメント:」とそれ以下の文字列をC列の値から削除し、E列の、元々の値(文字列)の前に貼りつけ
(3) E列の文字列の中から「「一言コメント:」という文字列を削除

以上です。
まず、(1)の検索がうまくいかず、(2)の文字列取得も、一文字ずつ数えてカウントし、あらためて「終わりから○文字」みたいな
やりかたをするしか方法が浮かびません。
たぶん、上級者ならもっとシンプルな書き方ができるのではないかと思い質問させていただきました。

どのように書けばよいでしょうか?よろしくお願いいたします。

30 :
For文をRowCntって変数で回していると仮定して
If Cells(RowCnt, 3).Value Like “*一言コメント:*″ Then
で引っかけるとか?

31 :
VBAなくても関数だけで目的達成しそう

32 :
>>29
Ruby で作った

text = <<"EOT"
ab一言コメント:12
あいう コメント:
xyz一言コメント:456
EOT

search_word = "一言コメント:"
sw_length = search_word.length # 7文字

text.each_line do | line | # 1行ずつ処理する
line.strip! # trim

# 単語が見つかった時だけ、単語の前後を出力する
if pos_1 = line.index( search_word )
puts "#{ line[ 0 ... pos_1 ] } - #{ line[ pos_1 + sw_length .. -1 ] }"
end
end

出力
ab - 12
xyz - 456

33 :
>>15
どんな機能でもショートカットキー設定できるの?

34 :
>>29
VBAでないとだめなわけじゃないならExcel関数でやればいいと思う

35 :
>>33
Alt押してみ

36 :
>>29
Dim c As Range, e As Range
s$ = "一言コメント:"
For Each c In Range(Cells(1, 3), Cells(Rows.Count, 3).End(xlUp))
  i% = InStr(c, s)
  If i Then
    Set e = c.Offset(0, 2)
    e = Replace(Left(c, i - 1) & e, s, "")
  End If
Next

37 :
ここは上級者向け?
ド素人が少しずついろんなサイトや動画見て覚えようとしてるレベルじゃダメかな

38 :
>>37
初心者も上級者もキチガイも見てる
みんなが毎日見てるわけじゃないから、タイミングが悪いと質問に答えてもらえないこともある

39 :
いろんなサイト見た方が早い

40 :
FileSystemObjectでFilesのコレクションょ取得したあと
それぞれにアクセスするにはどうしますか?
Files(1), Files(2)のようにするとエラーが出てエラいこっちゃとなります。
For each文ならできるのですがそこまでするほどのことではない時には?

41 :
コレクションょ

42 :


43 :
暇だし、見てみた

Const path = "c:\temp"
Dim fso As Scripting.FileSystemObject
Dim item As Object

Set fso = New Scripting.FileSystemObject
Set item = fso.GetFolder(path).Files.item("test.csv")

filesコレクションからの特定fileオブジェクトはitemプロパティでkeyをnameで指定すれば直接取れる
ExcelVBE上はitemでナンバリングされてるけど、配列みたいに番号指定は出来ないんじゃないかな(他の人知ってればいいな)

ファイル名特定できるならgetfileでもええね
個人的にはdirとか分かりやすいがね

44 :
itemでナンバリングされていないんじゃないか?
だからitem(1)やitem(2)で取得できないのでは。
それゃファイル名を()の中に書けば取得はできるけど。

45 :
for each でいいやん

46 :
「そこまでする」の考え方がまずおかしい
中身がたとえ1個でも2個でも普通はコレクションにはFor Eachを使うもんだぞ

47 :
>>45-46
このハゲー!
違うだろ!

最初にfor eachはやらないと言った。
コレクションの代表ということで任意の1個だけを選んでそのプロパティ等を調べる、
ということはプログラミング経験がある程度あればそういう状況に遭遇することはたまによくある。

48 :
fsoのfilesコレクションには通常のコレクションみたいにインデックス指定が出来ないのよね
countとitem(key)プロパティしかない
ファイルシステムの違いとか、歴史的経緯からかはしらんけど
だから基本for eachで他の形にする

49 :
>>48
そんなことはとおの昔に知ってるから
ここで質問をしたのだ。

50 :
ID:nn3rUaIL0
馬鹿はR

51 :
では次の方

52 :
インデックスが使いたいなら自分で配列でも作り直せばいいのに

53 :
不毛だな

54 :
Exit Forすればいいんじゃまいか

55 :
OpenDocumentスプレッドシートのデータをADOで取得する方法ある?
EXCELに変換しろってのは無しで。

56 :
>>44で自分で答だしてんじゃん

57 :
ドライバ自作しろ

58 :
プラスとマイナスはあるから丸ドライバー作るわ

59 :
ファイル入出力に使うopenやinputが何者か(関数?メソッド?など)知りたいです
これらの機能はなぜオブジェクトブラウザに乗っていないのでしょうか
マイクロソフトのウェブヘルプにはステートメントとして乗っているようですが
ステートメントというのは関数やメソッドなどの分類ではないですよね?
ご教示お願いします。

60 :
>>59
ステートメントというのは関数の祖先にあたる概念
コンピューター言語が発明された初期からある命令文の分類の一つ

61 :
馬鹿に馬鹿が答えている

62 :
VBAを覚えようとしてる初心者以前だが
まず何となくルールから覚えてる
=は同じじゃなくて←の意味ぐらいにとらえておく
あとはコードというか使いそうな単語を少しずつ
msgboxとかRangeとかactivecellとか
でもとっかかりがわからんわ
難しすぎですな…

63 :
覚えるのは結構だけど、普段やってる作業をVBAで再現するとこから始めると飽きずにやれるんじゃ
コピペ作業、シートコピー、ボタンで特定の計算とかね
だんだんCSV読みたくなったりして高速化したくなったりして、そうやって覚えていく

64 :
TEST

65 :
ユーザーフォーム上にあるボタン1を押すとボタン1を非表示にしてフォームのキャプチャを取得。
その後ボタン1を再び表示して終了。
みたいなものを作りたいのですが
SendkeyでAlt+Printscreenを送っても
素の状態ではボタン1が残った状態のものがキャプチャされ、
Waitをかけると今度は画面全体のキャプチャになってしまいます。
フォームをダイレクトに画像ファイルにする、とかでも良いのですが調べても中々応えに辿り着けなかったので皆様のお知恵をお借りしたいです。
何か良い手はないでしょうか。

66 :
以下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

67 :
すみません。
情報の伝達に齟齬がありました。
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

68 :
MacでもVBA使えますか?

69 :
使えるけどwindowsと全く同じように動くかまでは知らん

70 :
新しい天啓が下った。私は馬鹿ですらなく、場であり、これが私の仕える神のような気がしたが違ったような気がした。
忠実に表現したらこうなった、つまりそういうことなんだろう。

71 :
>>66
標準モジュールに書いてるか

72 :
WEBクエリはhttpsだと遅いすか?
そうなったサイトが急に読み込み遅くなったんすけど

73 :
初心者はまずここ見とけみたいなサイトとかYouTubeの動画ありますか?
宣伝込みでも俺が踏むだけなので良かったら教えて欲しいです
本当に何から見てけばいいのかわからない
asとかretとか当たり前に出られてもわからない…

74 :
知らんがな入門書買え

75 :
>>73
動画でプログラミングを覚えるのはとても難しい
エクセルの使い方や開発環境の整備とかなら分かるけど
言語を覚えるのは本を読んでコードを書く方が早いだろう

76 :
>>73
https://www.sejuku.net/blog/6516

77 :
retって何?

78 :
>>75
>>76
ありがとう
とりあえず、マクロからあるURLやoffice系のソフトを呼び出すコードをネットから丸パクリしてみたんだけど結局これが良いのか悪いのかそもそもルールすらあまりわかってない
サイトや本で必死に勉強しますわ

https://i.imgur.com/Llw26vN.jpg
https://i.imgur.com/CEIjgGb.jpg

79 :
字で書けよ基地外か

80 :
図形のグループ化についてです。

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

これを円と円の中のテキストをそれぞれグループ化してShapeの名前をテキスト名にするにはどうしたら出来ますか?

81 :
>>80
グループ化はGroupメソッドを使う
For Eachを使えば図形がいくつあっても関係なく同じようにできる

82 :
>>80
shapeオブジェクトでいじる

83 :
図形をVBAで複雑にいじろうとすると悲しみしか生まなさそう

84 :
Worksheets("min").Range(Cells(N, 2), Cells(N, 100)) = "999"
これで複数セルに一括入力したいのですが
アプリケーション定義またはオブジェクト定義のエラーです
と出ます。
何がいけないのでしょうか?

85 :
Nを定義してないんじゃない

86 :
cellの前にもシートがいる

87 :
With Worksheets("min")
.Range(.Cells(1, 1), .Cells(20, 2)) = "999"
End With
できました^^ありがとう

88 :
それでいい。

89 :
いえいえ

90 :
検索して違うシートから値を 持ってくるマクロで持ってくる値が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 :
cがnothingの時c.rowがエラー
バラせ

92 :
馬鹿がゾロゾロ出てくるのは何で?

93 :
春休みだから

94 :
>>91
If wS1.Cells(c.Row, "Z").value < 0 Thenでもエラーが出ます
With Worksheets("data")が邪魔をしてるとかですか?

95 :
"Z"で指定できたっけ

96 :
>>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プロパティで呼んだ方がいい

97 :
>>92
答らえれない馬鹿以下の癖に?

98 :
範囲に名前はなぁ・・。
上手く使いこなせればいいが、
みんなで共有するファイルに使うと、
知らない間に#REFだらけになってるwwww

99 :
>>71

レスありがと

標準モジュールに書いてない。
しばらく、やってなかったんで忘れていた。
すみません

100 :
>>98
異常時に例外が投げられるように設計するのは普通だと思うんだが・・・


100〜のスレッドの続きを読む
Go language part 2
Excel VBA 質問スレ Part61
【Alloy】形式言語による仕様記述【VDM】
くだすれPython(超初心者用) その44【Ruby禁止】
くだすれPython(超初心者用) その37
シェルスクリプト総合 その31
将来的にPGになりたいんだが、やっぱCから?
オブジェクト指向の活用方法を教えて下さい
Visual Studio 2019 Part2
コメント研究すれ。
--------------------
消し馬予想大会 part4
転職回数が多すぎる人 Part.10
鼻先が細いと美形に見える?●
【慰安婦問題】 少女像が地域の商業圏を亡ぼす?…住民との葛藤であちこちで設置中止★2[08/13]
天皇陛下即位礼 米国からはチャオ運輸長官が参列 平成の際には副大統領が参列 ★3
好きな洋楽アーティスト5組あげて自己満足するスレ
【音楽】シンディ・ローパー 66歳変わらずパワフル「ガンバレ」 派手に35周年ツアー
( ´・ω・`)ハム工場が使わなくなった学校の校舎を再利用した結果、めっちゃホラーな雰囲気に……💧 [585351372]
☆☆NBA 2019 プレシーズンスレ part9☆★
Linux普及のためには
今日もiOS11にはしない
☆☆★今、この瞬間、何を呑んでる?part2667★☆★
ゲノム編集の将来・経済成長?
【来年4月】『半沢直樹』続編の制作が決定! 堺雅人が「7年越しの出演OK」を出した理由
【FP1級】ファイナンシャルプランナー Part28【CFP】
スーツが売れない みんなどんな格好して仕事してんだよ [406978676]
【早稲田新戦力&2008予想メンバー】
失神GS◆◎ジ・オックス◆◎
フライトシム版 悪魔の辞典
関東ローカルラジオ実況スレ★716
TOP カテ一覧 スレ一覧 100〜終まで 2ch元 削除依頼