>>1乙
>全スレ998
挿入か貼り付けかはっきりしてくれ 行をコピーして挿入操作
マクロ記録したら、Selection.Copy Selection.iIsert Shift:=xlDown が出てきたけど普通に再生できたぞ
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&
プラウザのウィンドウサイズを大きくした後で画面キャプチャしたら
満足の行く画質になりました。
>>5の質問は撤回します。 >>4
まじすか
コピー元が別ブックだったのでそのせいかも リボンを自動的に非表示にする設定だととクイックアクセスに登録したものも含めてコマンドがすべて隠れてしまうんだけど
特定のコマンドのみ表示させておく方法はないかな?
マクロとして登録させて画像にマクロを登録しようとしたけど動かない。
>>9
うちのExcel2016だと隠れないけど、それ以降だと違うのかな
リボンの下に表示offでもだめなら
フォーム作って、UserForm.ShowModal=False という手もあるよ >>10
>>9
UserForm.ShowModal=False はどういう方法? >>11
自作フォームをカスタマイズメニューに見立てて自作のマクロなどを呼び出す >>12
マクロを呼び出すのは簡単なんだけど、各コマンド(既存の機能)をよびだすのかできない
たとえば描写とかペンとか消しゴム機能とか 既存の機能が必要ならリボンを非表示にしなきゃ良いんじゃね
>>15
ショートカットキーを設定してってことかな? csvを読む場合で、見出し行とデータ行が文字と数値で形式が違う場合とかどう処理しますか?
>>17
パワークエリで読み込んで任意のデータ型に変換する >>17
CSVを読み込む場合にブックとして読み込むことはまず無い。
というか、まずテキストとして読み込む。
処理も何も、全て自由に出来るぞ。 >>17
全部文字として読み込む。コードで数値として処理したいならcintやcdblでキャストすればいい。因みにワークシート関数にはNumberValueってのがある。 あれなんとかならんかな。
NULLがあるとコケるから、
いちいちIIF(A IS NOT NULL, CINT(A))ってやらなきゃいけないの。
VBA で、セルの指定しても行の指定が無効になってて、必ず1行目に表示されてしまいます。
何が原因でしょうかね?
教えてください。
ここだけじゃなく5chはどこも似たり寄ったりです
貴方が来るような場所じゃありません
>>25
霊性?
馬鹿確定
原因としては正しかっただろうが >>22
ソースコード書けないの?
君書いたのが本当にセルの指定をしてると信じる人がいるとでも? よろしくお願いします。
数百行あるシートで、上から順に一行ずつ以下の操作を行いたいです。
(1) C列の文章の中に、「一言コメント:」という文字が入っていれば2へ。なければ終わり、次の行へ
(2) 「一言コメント:」とそれ以下の文字列をC列の値から削除し、E列の、元々の値(文字列)の前に貼りつけ
(3) E列の文字列の中から「「一言コメント:」という文字列を削除
以上です。
まず、(1)の検索がうまくいかず、(2)の文字列取得も、一文字ずつ数えてカウントし、あらためて「終わりから○文字」みたいな
やりかたをするしか方法が浮かびません。
たぶん、上級者ならもっとシンプルな書き方ができるのではないかと思い質問させていただきました。
どのように書けばよいでしょうか?よろしくお願いいたします。
For文をRowCntって変数で回していると仮定して
If Cells(RowCnt, 3).Value Like “*一言コメント:*″ Then
で引っかけるとか?
>>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 >>15
どんな機能でもショートカットキー設定できるの? >>29
VBAでないとだめなわけじゃないならExcel関数でやればいいと思う >>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
初心者も上級者もキチガイも見てる
みんなが毎日見てるわけじゃないから、タイミングが悪いと質問に答えてもらえないこともある FileSystemObjectでFilesのコレクションょ取得したあと
それぞれにアクセスするにはどうしますか?
Files(1), Files(2)のようにするとエラーが出てエラいこっちゃとなります。
For each文ならできるのですがそこまでするほどのことではない時には?
暇だし、見てみた
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とか分かりやすいがね
itemでナンバリングされていないんじゃないか?
だからitem(1)やitem(2)で取得できないのでは。
それゃファイル名を()の中に書けば取得はできるけど。
「そこまでする」の考え方がまずおかしい
中身がたとえ1個でも2個でも普通はコレクションにはFor Eachを使うもんだぞ
>>45-46
このハゲー!
違うだろ!
最初にfor eachはやらないと言った。
コレクションの代表ということで任意の1個だけを選んでそのプロパティ等を調べる、
ということはプログラミング経験がある程度あればそういう状況に遭遇することはたまによくある。 fsoのfilesコレクションには通常のコレクションみたいにインデックス指定が出来ないのよね
countとitem(key)プロパティしかない
ファイルシステムの違いとか、歴史的経緯からかはしらんけど
だから基本for eachで他の形にする
>>48
そんなことはとおの昔に知ってるから
ここで質問をしたのだ。 インデックスが使いたいなら自分で配列でも作り直せばいいのに
OpenDocumentスプレッドシートのデータをADOで取得する方法ある?
EXCELに変換しろってのは無しで。
ファイル入出力に使う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系のソフトを呼び出すコードをネットから丸パクリしてみたんだけど結局これが良いのか悪いのかそもそもルールすらあまりわかってない
サイトや本で必死に勉強しますわ
図形のグループ化についてです。
ショート上に円が無数にあってその円の中にテキストがあります。
これを円と円の中のテキストをそれぞれグループ化して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プロパティで呼んだ方がいい