Excel VBA 質問スレ Part65

■ このスレッドは過去ログ倉庫に格納されています
2020/03/17(火) 16:27:20.88ID:hh8LiIgR0

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

※前スレ
Excel VBA 質問スレ Part64
https://mevius.5ch.net/test/read.cgi/tech/1575297834/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
2020/03/31(火) 03:37:14.37ID:sCGR7IuL0
>>117って難しい?
142デフォルトの名無しさん (ワッチョイ 9e8a-k8oR)
垢版 |
2020/03/31(火) 05:23:52.03ID:kiJT2Kt60
zipをxlsxにすれば、VBAを使わなくても開くだけで解凍できる。どこに解凍されるかは知らんが。
2020/03/31(火) 08:15:19.13ID:AMZVbv8Gd
>>126
zip解凍ぐらい大して難しく無いんだから答えてあげたら?
2020/03/31(火) 08:25:37.91ID:FZ3Oti5EM
>>143
既に>>139で答えられてるだろ
スレの流れも追えないのか?w
2020/03/31(火) 08:42:47.60ID:AMZVbv8Gd
>>141
VBA 共有編集でググレば参考になる所が出てくる。
2020/03/31(火) 08:43:03.17ID:AMZVbv8Gd
>>144
バーカwww
2020/03/31(火) 09:32:50.09ID:WgVk0vye0
うゎ、真性かよw
2020/03/31(火) 13:30:22.20ID:UcE7ogps0
そういやxlsxがそもそもzipファイルなんだよな
2020/03/31(火) 22:47:10.97ID:Rc1BoApG0
そーなのか
道理で大昔作ったフォーマットを作り直してみたら容量が半分程度だったんだ
効率的なコード書けるようになった俺スゲーって訳じゃなく、エクセルさんが凄かったのね
2020/04/01(水) 01:30:54.93ID:IClGbcwW0
拡張子zipにして展開すると画像ファイル取り出せるしな
2020/04/01(水) 02:22:12.62ID:06G29rGEa
今さら次郎
2020/04/01(水) 03:04:48.87ID:Ex6pONtn0
これから三郎
2020/04/01(水) 03:32:39.41ID:8LLFjcSO0
終わりに四郎
2020/04/01(水) 04:33:51.17ID:h6/hOHkqM
アッと驚くタメ五郎
2020/04/01(水) 12:55:56.84ID:2mAYLJyeM
>>151
好きだよ六郎
2020/04/01(水) 18:21:42.63ID:UG3CS4Iqd
ネットでこんな素晴らしい物を見つけたんだけれども、これがデータ量が多いと結構時間掛かるんだけど、高速で図形として書き出す方法って他にありませんか?


http://izawa-web.com/excelbcad/dxfreader.html
2020/04/01(水) 22:01:42.03ID:4Q64PMPZ0
>>156
CADアプリで画像にでも変換してシートに貼り付けた方が早くて綺麗
オートシェイプに変換すると重くなるし比率が狂うし、メリットがなさすぎる
2020/04/01(水) 22:28:36.72ID:kG9c2P/10
>>157
貼って終わりならそれでもいいんですが、数あるCADデータの中から指定のデータを呼び出してエクセルに貼り付けて線の色とか文字を取得したいんですよね。
2020/04/01(水) 22:54:48.05ID:cJ4COAhO0
>>145
更新時間を短くする方法は載ってなかった
2020/04/02(木) 00:31:10.86ID:hOxCGNmI0
あるマクロを開いた瞬間に自作したユーザーフォームが出るようにする
それと同時にエクセルファイルを選択できる ファイルを開くウィンドウが出るようにする

ド基礎以前だと思うのですがおしえていただきたく、、
2020/04/02(木) 00:42:40.97ID:quV7czYu0
ググれば全部出るのに何故ここできく
2020/04/02(木) 02:21:22.11ID:9ZVXgmel0
>>160
Workbook_Open()
UserForm1.Show
Application.GetOpenFilename
2020/04/02(木) 07:03:17.01ID:qQpWBHI+0
ド基礎以前発言がひっかかるな...

あるマクロが他人の作った編集できないマクロなら難しいね
パスワードクラックはNGで
2020/04/02(木) 08:01:03.55ID:qvprCKttr
少しくらいの調べる能力も持たないお子ちゃまが多い
2020/04/02(木) 10:29:10.89ID:2gPurUpa0
ド基礎以前のこともわからないやつに教えても理解できんだろう
2020/04/02(木) 18:43:17.46ID:hOxCGNmI0
>>162
ありがとう、ネットで捜してコピペしながら頑張ってくわ

起動すると作ったユーザーフォームが開きつつ
ファイルからエクセルを選べるウィンドウを出す

開いたエクセルにはBとCの2列目からずらーっと数字が並んでるからそれをあらかじめ自分のカスタマイズした散布図にする
(2列目から始まるが終わりはデータによって違う)

ボタンによって2つの散布図に分けられる

がんばりやす
2020/04/02(木) 19:19:56.56ID:K5yIowQc0
>>164
人に教えることで自分も成長する。
2020/04/03(金) 02:02:50.37ID:Vs5HZC6Ua
成長してないやん
2020/04/03(金) 12:51:38.72ID:EwhXV+Zid
>>162
そりゃ駄目だ。
モーダルとモードレスを調べよう。

モーダルでやりたかったらフォームのInitializeかActivateイベントだな。
2020/04/03(金) 12:54:37.89ID:EwhXV+Zid
>>159
AutoUpdateFrequencyプロパティじゃね?
ググっただけだけど。
2020/04/03(金) 13:10:39.84ID:tVlvtk9J0
>>167
それはあるな
2020/04/03(金) 13:51:03.50ID:S5/JCD2f0
>>170
それ、イミディエイトペインで試したけど、5未満はNGだよ

>>145の共有編集って、Excel2016で実装した、OneDriveとか使ってクラウドでやるやつだと思ったんだけど、違うのかな
×共有編集 ○共同編集 らしいけど
2020/04/04(土) 10:09:51.56ID:3Ir6pkSX0
モーダルあなた疲れているのよ
2020/04/04(土) 10:15:36.71ID:nxBKOFy80
自動更新の間隔を短くするのが無理なら手動でできないのかな?
強制的に切断と接続を繰り返してみたらどうだろう
2020/04/04(土) 13:14:06.10ID:MDQA80eK0
>>173
やっぱり、逆だよね
2020/04/04(土) 18:10:09.51ID:x7mbZh3f0
>>172
ローカルのつもりだったんだけどそれなら共同編集になるのかな?
2020/04/05(日) 01:47:50.77ID:LE/VkChT0
セルA1とB1の数値が一致しない場合はC1を塗りつぶす、というのはできるのでしょうか?
2020/04/05(日) 01:56:11.77ID:RR8jfU5J0
>>177
If A1 <> B1 Then [C1].Interior.Color = RGB(1, 234, 56)
2020/04/05(日) 07:39:22.81ID:BAT1a6hLp
>>178
ありがとうございます!
2020/04/05(日) 11:37:21.47ID:FbjC6ZOO0
A行の値を見て、その値が1だったら、空白行を上に2つ入れたいのですが、できますか。
2020/04/05(日) 11:44:06.84ID:FbjC6ZOO0
間違えた。

A列の値を見て、その値が1だったら、空白行を上に2つ入れたいのですが、できますか。
2020/04/05(日) 11:59:20.85ID:Kx41qnng0
できます
2020/04/05(日) 12:00:45.64ID:RR8jfU5J0
>>180
Sub Macro1()
  For r = Cells(Rows.Count, 1).End(xlUp).Row To 1 Step -1
    If Cells(r, 1) = 1 Then Rows(r).Resize(2).Insert
  Next
End Sub
2020/04/05(日) 12:32:03.32ID:FbjC6ZOO0
>>183
ありがとうございます!できました。
2020/04/06(月) 00:22:26.25ID:8R1em71p0
ほんまこの程度自分で考えないのかなあ
2020/04/06(月) 01:48:40.71ID:SI8CeRSt0
子が吐き出したcsvデータ(子の状況により1ファイル数行〜数百行程度のデータ00000000.csv〜FFFFFFFF.csv)を親で吸い上げて管理用に整理するマクロを作成しているのですが子のデータ数が多くなったせいか親の処理を実行中にExcelが落ちるようになりました。
現状では
Workbook.Open 00000001.csv
でファイルを開いてから配列に叩き込んで処理しているのですが、
他に何か開かずに直接配列に収納するとか別の開き方など良い手段はありますでしょうか。
2020/04/06(月) 02:53:22.77ID:mfVHo2vq0
>>186
その説明では落ちる原因がわからんので対処のしようがない
とりあえずテキストファイルとして開いてSplitで配列に入れるとか
2020/04/06(月) 07:33:50.36ID:c57grIZCr
>>174
自動更新しても更新されない
強制的にはできないね
2020/04/06(月) 09:41:20.32ID:LXVfU9S30
>>174
最初、自前タイマーでの自動保存を提案しようと思ったけど、全ユーザーの同期とか排他処理とか必要になるからやめた
同時使用数にもよるけど、現状の5分ぐらいが実用限度だと思う
それでも問題があるから、MSも共有ブック機能を非推奨にしたんだろうしね
2020/04/06(月) 15:09:00.57ID:0mGlPNRI0
>>186
まず落ちる原因の特定が必要
本当にデータ量が原因かどうか?

それでもし量の問題だとしたら
同時に必要なデータを見定める

たとえばA、B、Cのファイルを同時に開いてたが
じつはAとB、BとCで処理する工夫の余地があるとか

それでもアルゴリズムではどうにもならない量なら
SQLとかのデータベースに移行する
2020/04/06(月) 22:35:08.05ID:sFf9EAmnM
https://oshiete.goo.ne.jp/qa/1972570.html
ActiveWorkbook.SaveAsにするとファイル名変えずに保存できる理由を教えてください
Copyした時点で別ブックが作られるんですか?
192デフォルトの名無しさん (ワッチョイ 233e-g9A3)
垢版 |
2020/04/06(月) 23:45:47.95ID:jDCeOgrg0
マクロで作られた印刷ボタンを押すと両面印刷で出てくるからこれを片面印刷に統一したいんだけどどうしたらいいの?
2020/04/07(火) 00:23:26.13ID:YDovvV0g0
>>192
マクロを書き換える
印刷方法の変更はプリンターごとに違ってて、Excelのマクロの中でも一番面倒な部分だから、会社でわかってる人に聞くのが早い
2020/04/07(火) 00:29:05.68ID:BEkwL8Dn0
プリンタ登録を2つに増やして使い分けるのが簡単。

でもWin95のころはコピーするだけでプリンタ増やせたけど年々難しくなるよね
2020/04/07(火) 00:35:40.64ID:8SYsQHh80
正直印刷は、機器変更、NW、印刷位置、紙質とかでトラブルが非常に多くなるから、
金、人命とか絶対にVBAで自動化しなければ行けない理由がない限り手動にするようにしたわ
印刷部分だけPDFにして置いておくとか
2020/04/07(火) 01:53:49.62ID:qS+8J4U+0
マクロは印刷プロパティを出すところまで。
それ以上はトラブルの原因になるからやめとき
2020/04/07(火) 04:36:48.84ID:hIwtKFus0
そもそも紙にこだわるのが非効率で
電子化するのが本来の理想ではある
198デフォルトの名無しさん (ワッチョイ 233e-g9A3)
垢版 |
2020/04/07(火) 07:13:41.88ID:xwPFl55C0
プリンタのプロパティでプリンタの設定自体を片面印刷にしておくと片面印刷になりますか?
199デフォルトの名無しさん (ワッチョイ 4d8e-jJEW)
垢版 |
2020/04/07(火) 08:07:09.26ID:YQg5kUpF0
そのくらい自分でやって試せよ
2020/04/07(火) 08:07:32.68ID:FCg3JG5md
>>186
CSVをWorkbook.Openで開くのが駄目。
OpenステートメントとかFileSystemObject使う方が良い。
2020/04/07(火) 09:12:43.26ID:+6IcJjJU0
>>197
そんなの職場や利用目的によりけりだから
202デフォルトの名無しさん (アウアウクー MM81-g9A3)
垢版 |
2020/04/07(火) 12:34:06.90ID:y7/AcPOrM
コントロールパネルからプリンタのプロパティで片面印刷に設定したんだけど片面印刷オンリーになりません
どうしたらいいですか?
2020/04/07(火) 12:42:21.74ID:RfysvMTgr
やったこと全部書き出してプリンターメーカーに聞け
2020/04/07(火) 15:41:03.55ID:AQdBAJYM0
特定の文字列のみ文字色を変えたいんだけど、
置換を使うと指定した文字列を含むセルに入力されている全ての文字の色が変わってしまう…

現状では数百数千セルある中から文字列を選択して文字色変更を繰り返す、という辛い作業を続けているのですが
この様に、指定した文字列だけの色を変更って出来ませんか?
2020/04/07(火) 17:49:52.17ID:yHbrhPie0
>>204
Sub 特定文字列に色をぬる(検索範囲 As Range, 対象文字列 As String, 色 As Long)
Dim r As Range
For Each r In 検索範囲
Dim s As Long
s = InStr(r.Characters.Text, 対象文字列)
If s > 0 Then
r.Characters(s, Len(対象文字列)).Font.Color = 色
End If
Next
End Sub
2020/04/07(火) 19:26:33.02ID:FCg3JG5md
>>205
何か少し違う気がする。
rの中で対象文字列が1回しか変わらないんじゃね?

s=instr(s+1,r.Value,対象文字列)でsが0になるまでループかな?
2020/04/07(火) 19:29:30.91ID:ZYiBkzsm0
何から覚えようVBA
2020/04/07(火) 19:42:05.21ID:F7VfxkGZ0
>>198
やってみてどうなった?
2020/04/07(火) 20:04:27.93ID:4wIwYA/Ra
>>207
覚えるのが目的じゃなかろう
2020/04/07(火) 20:22:06.26ID:83dL758F0
>>187,190,200
186です。ご回答有難う御座います。
ご指摘を参考に以下の様な形に変更したところ、強制終了する事なく全ファイルの吸い上げが出来ました。お手数をお掛け致しました。
'// ファイル数カウント //
Dim CSVPth As String, CSVNam As String
CSVPth = Dir(CSVDir & "*.csv")
CSVNam = CSVPth
Do While CSVPth <> ""
CSVPth = Dir()
CSVNam = CSVNam & CSVPth
Loop
Dim CSVAry As Variant, CSVCnt As Long
CSVAry = Split(CSVNam, ".csv")
Dim OutAry() As Variant
ReDim OutAry(1 To (UBound(CSVAry) + 1) * 6, 1 To 1)
Dim LinAry As Variant, LinStg As String, LinCnt As Long
'// CSVファイル読込処理 //
For CSVCnt = LBound(CSVAry) To UBound(CSVAry)
If CSVAry(CSVCnt) <> "" And Dir(CSVDir & CSVAry(CSVCnt) & ".csv") <> "" Then
Open CSVDir & CSVAry(CSVCnt) & ".csv" For Input As #CSVCnt + 1
LinCnt = 0
Do While Not EOF(CSVCnt + 1)
Line Input #CSVCnt + 1, LinStg
LinCnt = LinCnt + 1
LinStg = "" & Replace(LinStg, """", "") & ""
LinAry = Split(LinStg, ",")
<-- 処理 -->
ReDim Preserve OutAry(1 To (UBound(CSVAry) + 1) * 6, 1 To WorksheetFunction.Max(UBound(OutAry, 2), LinCnt)
Loop
Close #CSVCnt + 1
End If
Next Range(Sheet2.Range("A1"), Sheet2.Cells(UBound(OutAry, 2), UBound(OutAry, 1))).Value = WorksheetFunction.Transpose(OutAry)
2020/04/07(火) 21:04:34.54ID:YDovvV0g0
Windows10になってから、アプリごとに印刷設定を覚えるようになってややこしくなった
以前はプリンタのプロパティからデフォルト状態を決め打ちできたのに
2020/04/07(火) 22:46:04.39ID:yHbrhPie0
>>206
その辺は仕様がはっきりしないから何とも言えんし
そもそも丸投げを受けたつもりはない

s+1だとaaaaaにたいしてaa指定したら5文字全部色変わるけどそれが良いのかどうかわからんだろ
2020/04/08(水) 03:24:16.94ID:PBw6emZJ0
4文字目から3文字赤に変えたマクロの記録
ActiveCell.Characters(Start:=4, Length:=3).Font.ColorIndex = 3
214デフォルトの名無しさん (ワッチョイ e23e-1Ne1)
垢版 |
2020/04/08(水) 19:41:01.55ID:uS6fz3VF0
まさかシート毎に印刷の画面から片面印刷を選ばなきゃ両面印刷をされるなんて知らなかったわ
2020/04/08(水) 19:55:07.25ID:o5xrKhXHa
プリンター関係の情報はシートごとになってるから。
手動ですべてのシートを両面印刷にする方法はあるけど。
2020/04/08(水) 20:05:36.79ID:T31Wtd0td
シート全選択してプリンタ設定変更してからやればいい
2020/04/08(水) 20:16:40.48ID:o5xrKhXHa
シート全選択してプリンター設定してもダメなんですよね。
2020/04/08(水) 20:32:27.07ID:wSF4QqHVa
あきらめろん
2020/04/08(水) 20:37:06.75ID:T31Wtd0td
>>217
上書き保存してファイルを開き直せ
2020/04/08(水) 22:17:54.74ID:Tninom9X0
dwgファイルをどうにかしてEXCELに図形で取り込みたいんだがなんか方法ありません?
家の見取り図みたいなファイルなんだけど。
2020/04/08(水) 23:34:26.41ID:W1XPdmgi0
>>220
DXFに変換
2020/04/09(木) 03:10:49.06ID:lF+KAcZx0
>>220
後輩にやらせる
2020/04/09(木) 04:58:57.51ID:yf4TGzZj0
>>220
JacConvert
2020/04/09(木) 07:53:04.17ID:q52/CIa+r
セル右クリックしたら出てくるメニューを禁止に出来ない?
書式設定とかコピーとか貼り付けとかメニュー自体出ないように
2020/04/09(木) 07:57:33.92ID:YKVVyHYsd
>>224
サブクラスで出来るかどうか。
ここには答えられる程の上級者が居ないと思う。
2020/04/09(木) 08:14:30.62ID:44A41Mtl0
保護かければ?
2020/04/09(木) 08:18:29.24ID:q52/CIa+r
>>226
保護かけると使えなくなる機能があるから無理なんだ
2020/04/09(木) 08:39:31.78ID:K8984GmW0
これは?普通にググったら出てきたぞ
https://www.moug.net/tech/exvba/0150035.html
2020/04/09(木) 09:20:01.56ID:x5VgstST0
普通にやり方あるぞ
2020/04/09(木) 12:24:02.59ID:wcbpQmosp
エクセル2007についてです

セルをクリックすると、カレンダーが表示されて、そのカレンダーの日付をクリックすると、セルに日付が挿入される

という形にしたいのですが、ここで問題があります

一つはAccessがないため、カレンダーコントロールがないのと、もう一つはインターネット接続不可端末のため、どこからかDLするというのができないです

この場合のカレンダーから日付取得をするというのはできないのでしょうか?
2020/04/09(木) 12:30:31.66ID:8gmsr/Td0
>>230
ボタンを横7列、縦6つ並べたカレンダーコントロール的なフォームを自作すればいい
https://ateitexe.com/excel-vba-calendar-control/
2020/04/09(木) 12:31:40.44ID:veSARJt1M
カレンダーのシートを作って、そこから選択させるとか
2020/04/09(木) 13:01:14.59ID:wcbpQmosp
>>231
早速参考にさせていただきました
ありがとうございます

ただ、これ起動すると、日付クリックした後、テキストボックスに日付挿入になるので
どこかのコードにテキストボックスではなくてセル挿入になるようにしたらいいと思うんですけれど、どこに記述するのがいいですかね?

まだvbaいじり始めた身としてはここまで複雑だといじりづらいというか
2020/04/09(木) 20:27:14.43ID:PvaeZ0Ck0
>>224
BeforeRightClickイベント
2020/04/09(木) 21:58:32.74ID:TQ3Lwxfd0
>>221
調べるとDXFはTextファイル形式で出来ているみたいでネットで調べながらやってみたけど、重い。まぁ俺の書き方が駄目な気もするけど。線の数が4万とか超えてる。
2020/04/09(木) 23:05:01.47ID:vJBq1mcg0
作者不明のファイルを修正しているのですが、そのファイル自身を指定するのにファイル名で
記述してありました。これだと「●●Ver1.0.xlsm」→「●●Ver1.1.xlsm」のようにファイル名を
変える度にコードを修正しなくてはならないためThisWorkBookに変えようかと思っているのですが
その場合なにか弊害とかあるんでしょうか?
237デフォルトの名無しさん (ワッチョイ e23e-1Ne1)
垢版 |
2020/04/10(金) 07:51:15.22ID:goOf5Ofq0
シートを全選択したら一括で変更できるのか
2020/04/10(金) 08:26:28.75ID:tq9uLSTsr
>>236
弊害は無いよ
2020/04/10(金) 09:37:44.73ID:Rte1PrgOr
そのファイル自身だと完全に明確で揺らがないなら、thisworkbookでいんじゃね
2020/04/10(金) 19:23:44.82ID:LG9l2UEQ0
どこから参照されてるのか全部調べないとわからないんじゃないかそれ。
まあThisworkbookを知らないだけの可能性は高いが。
2020/04/10(金) 19:27:26.52ID:f64Irgef0
>>238,239
ありがとうございます。

今日内容を確認してきましたが、マクロが記述されたブック(A.xlsm)上でシートを作成し、それをコピーして
新規ブック(B.xlsx)を作成してからもう一度A.xlsmの特定のシートをアクティブにする、という処理の中で
A.xlsmのブック名を明示してありました。

今日は時間がなくて試せなかったのですが、この場合でもマクロが記述されたブックはA.xlsmなので
ThisWorkBookで問題ないかなと思ったのですが、それであっていますでしょうか?
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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