X



Excel VBA 質問スレ Part50 [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん 転載ダメ©2ch.net (ワッチョイ 7e6d-ffY6)
垢版 |
2017/08/27(日) 12:40:17.57ID:LjjEWylk0
!extend:checked:vvvvv:1000:512

スレ立ての際は一行目に
!extend:checked:vvvvv:1000:512
と入れてスレ立てして下さい

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

※関連スレ
VBAなんでも質問スレ Part2
http://mevius.2ch.net/test/read.cgi/tech/1432173164/
Access VBA 質問スレ Part1
http://mevius.2ch.net/test/read.cgi/tech/1328536426/
Excel総合相談所 126
https://mevius.2ch.net/test/read.cgi/bsoft/1496487719/

※前スレ
Excel VBA 質問スレ Part49©2ch.net
http://mevius.2ch.net/test/read.cgi/tech/1498410914/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
0688デフォルトの名無しさん (スプッッ Sd73-8plx)
垢版 |
2017/10/17(火) 18:54:28.25ID:x5EvbHpMd
APIでフォームに線を書くまで行けました。
フォームに形状入力してFINDで検索して該当した行を右に空になるまで線を書き続けるコードにしました。
最初の一桁の数字は方向。4が左、6
が右という風に指示してます。

開始原点指定して、
線をLINETOで書いてて書いたらその近くにテキストボックスをADDで追加したいんですが、LINETOで指定した原点位置とテキストボックスのトップ、レフトで指定した位置がちょっとズレるのはなんかあるんですか?

https://i.imgur.com/FVhURv8.jpg
0689デフォルトの名無しさん (ワッチョイ 199f-mxX+)
垢版 |
2017/10/17(火) 20:25:29.97ID:vT3liOjV0
秒単位で記録されてる1日分で数万件の動作ログから、時系列かつ動作種類別の棒グラフ的な物を作りたいんだけど、、、
仮に横棒にするとして一時間単位に別ても3600セルも必要になるわけだけど、こういうのってどうするのが良いの?
0690デフォルトの名無しさん (ワッチョイ 13eb-MeUd)
垢版 |
2017/10/17(火) 21:06:12.48ID:T7W1uv5q0
>>689
ピボット
0694デフォルトの名無しさん (ワッチョイ fb8a-BSx0)
垢版 |
2017/10/18(水) 12:13:09.98ID:f7VGWmsn0
横棒グラフ的 じゃなくて横棒グラフそのものを作りゃいい
何故セルをグラフとして使うのかの理由が判らんと何ともいえないが
毎秒すべてのデータが必ず必要とも思えんが、間隔変えれば概略にできるし
特異点を知りたい とかなら数値を基準に求めるものだろうし、その部分の
前後をピックアップして表示するようにして なるべく判りやすいものに
するのがグラフ化の目的なんでは
0696デフォルトの名無しさん (アウアウカー Sad5-EduE)
垢版 |
2017/10/18(水) 14:36:19.68ID:ra0RBv56a
>>688
試して無いから何とも言えんが、クライアント領域関連か、座標系の違いかな。
GetClientRectとかTwipsPerPixelでググってみる。違ったらごめん。

>>689
説明が分かりにくい。
3600のセルにデータが取れてるならそれを指定すれば良いということになる。
多分、3600セルという多量のデータだから適当な所で折り返してて1時間の00:00秒から59:59秒の流れを持ったまとまりとして認識させることが出来ないとかかな。
良く分からんが各秒の値でプロットする訳じゃ無いわけだし、平均とか取るもんじゃないの?
0697デフォルトの名無しさん (ワッチョイ ddb3-aYWJ)
垢版 |
2017/10/19(木) 21:49:18.11ID:7IrXkeDg0
ビットコインの公開APIから値段を取る方法ってありませんかね
パワークエリ使ってたんですがプロトコル障害で使えなくなってしまい....
0698デフォルトの名無しさん (ワッチョイ 3a19-7unl)
垢版 |
2017/10/20(金) 07:03:05.09ID:3rm9dGiJ0
フォルダ内にあるファイルのすべてを対象に、
ファイル名の最後を「_ou.mp4」に変更するマクロを作ってください。お願いします。

例)〇〇.mp4 → 〇〇_ou.mp4
0700デフォルトの名無しさん (ワッチョイ 7aeb-KyXl)
垢版 |
2017/10/20(金) 07:36:34.81ID:wf1d5/480
>>697
公開APIのプロトコル障害なら公開APIでは取れないって事じゃないの?
0701デフォルトの名無しさん (ワッチョイ 7aeb-KyXl)
垢版 |
2017/10/20(金) 07:37:08.93ID:wf1d5/480
>>698
ココナラで買え
0704デフォルトの名無しさん (ワッチョイ d680-gbX+)
垢版 |
2017/10/20(金) 09:16:48.80ID:h7aVEIq70
ls | Where-Object { $_ -like "*.mp4" -and $_ -notlike "*_ou.mp4" } | Rename-Item -WhatIf -NewName { $_ -replace '\.mp4$','_ou.mp4' }

PowerShell で書いたので、そのフォルダへ移動してから実行して。
-WhatIf が付いているので、本当には実行せずに、結果だけを見れる。
本当に実行する際は、-WhatIf を削除して実行して

-like は一致するもので、-notlike は一致しないもの。
正規表現の \.mp4$ で、. に \ を付けているのは、
. の特殊な意味をなくして、普通の文字として扱うため(エスケープ)

x.mp4 → x_ou.mp4

ただし、x.mp4, x_ou.mp4 が、同じフォルダ内にある場合は、
変換できずにエラーになるかも
0705デフォルトの名無しさん (オッペケ Sr85-2MXH)
垢版 |
2017/10/20(金) 12:21:32.47ID:GcA5ZrMsr
パワーシェル面倒くさw
0708デフォルトの名無しさん (アウアウオー Sae2-7O3d)
垢版 |
2017/10/20(金) 13:06:50.73ID:gM7OZlf+a
>>699
filesystemobjectのインスタンス取得
フォルダ取得
フォルダ内のファイルを精査
mp4のみ抽出
拡張子取得
拡張子を除いて指定の文字列を追加した文字列を取得
ファイル名変更

これでわかれ
0710デフォルトの名無しさん (ワッチョイ cee7-bcII)
垢版 |
2017/10/21(土) 00:29:32.54ID:YcOLTnbA0
explorerのアドレス欄にcmd入れて
ren *.mp4 *_ou.mp4
とかじゃなかったっけ
0711デフォルトの名無しさん (ワッチョイ cee7-bcII)
垢版 |
2017/10/21(土) 01:08:37.57ID:YcOLTnbA0
制約があったか じゃ3行で
ren *_ou.mp4 *._oump4
ren *.mp4 *_ou.mp4
ren *._oump4 *_ou.mp4
0712デフォルトの名無しさん (アウアウカー Sadd-2iY5)
垢版 |
2017/10/21(土) 14:00:51.60ID:zr63QsaMa
質問失礼します
あるフォルダ内に数千件のファイルが格納されていて、そのフォルダに新規ファイルが入ってきたときにそのファイルを抽出(ファイル名を取得)したいのですが一番高速に処理を行うにはどうしたらいいでしょうか
0721デフォルトの名無しさん (オッペケ Sr85-37LT)
垢版 |
2017/10/21(土) 16:56:56.02ID:Uf1MTp5vr
白雪姫?
0723デフォルトの名無しさん (ワッチョイ 7aeb-KyXl)
垢版 |
2017/10/21(土) 19:08:51.19ID:Py32WHo50
>>712
基準となる時点のファイル名一覧をシートに記録しておく
比較時点のファイル名一覧を別のシートに記録する
vlookupとかで同じファイル名があるか調べる
0726デフォルトの名無しさん (ワッチョイ bab3-DBD/)
垢版 |
2017/10/21(土) 21:48:50.23ID:ZBz0JWdz0
>>712
フォルダをモニタリングするツールが色々とあるからそれ使うといいよ
たいていファイルシステムイベントで処理してるから
自分で比較するのに比べれば数桁高速だと思う
0727デフォルトの名無しさん (ワッチョイ bab3-DBD/)
垢版 |
2017/10/21(土) 22:03:01.22ID:ZBz0JWdz0
>>720
それよく分からないから教えて。

例えば
Set minuend = Union(Range("C3", "D5"), Range("D4", "E6"))
Set subtrahend = Range("A2", "A4").EntireRow
Set expected = Union(Range("C5", "D5"), Range("D5", "E6"))
の場合に
minuend - subtrahend = expected になるようにしたいんだけど
0729デフォルトの名無しさん (ワッチョイ 3dea-REa2)
垢版 |
2017/10/21(土) 23:00:04.56ID:MeuVmzom0
勝手にインストールできないなら許可貰えば済む話なのにな
業務上必要なら許可降りるだろ
0732デフォルトの名無しさん (ワッチョイ ddb3-0MKJ)
垢版 |
2017/10/22(日) 01:10:16.60ID:ZsHOZNag0
それ作って給料もらってる人がこの板にいるわけない。
せいぜいマ板がいいところ。
0733デフォルトの名無しさん (ワッチョイ 9ae3-5n8Z)
垢版 |
2017/10/22(日) 01:15:09.08ID:3ymZg3xq0
>>712
ロバストコピーでフォルダのコピー
その際に何を新たにコピーしたのかをログに書き出すオプションを設定しておく
そのログを読みこんで後はお好きに処理
勝手に上書きされたり、勝手に消されてもバックアップ取れてて一石二鳥
0736名無しさん@そうだ選挙に行こう! Go to vote! (ワッチョイ f9f7-lW13)
垢版 |
2017/10/22(日) 10:06:24.11ID:ASqT9k9u0
日記

今まで動いてたマクロがエラーで止まった
テキストファイルの内容を調べてリネームするだけの簡単な物なのに、調べたらファイル名にユニコードが入ってた
10年ぐらい前に作った物なので、今さら対応するのめんどくさいなあ。これも時代か

どうせ台風でヒマだからちょっとやってみるか
0738名無しさん@そうだ選挙に行こう! Go to vote! (ワッチョイ baa4-V3Kl)
垢版 |
2017/10/22(日) 19:16:04.56ID:bE/NxZx30
>>737
自己紹介ですか加齢臭ジジイさん
0740デフォルトの名無しさん (ワッチョイ 5103-2MXH)
垢版 |
2017/10/22(日) 22:49:10.62ID:Nb0y5KGU0
突然のヒマシジイvs加齢臭ジジイ対決w
0741デフォルトの名無しさん (スップ Sd9a-2TS2)
垢版 |
2017/10/23(月) 18:08:04.19ID:iGj4ThY4d
フォルダに複数のシートが入っていて、それぞれ○○.xls(○は名字)のファイルがあって、それの○○(○は名字)のシートのみを繰り返し検索、抽出を繰り返すにはどうしたらいいですか?

指定シートのみ繰り返し検索の仕方をご教授お願いします。

file = Dir(path & "*.xls")

Do While file <> ""

Set book = Workbooks.Open(path & file)

For Each sheet In book.Worksheets

Set f = sheet.Cells.Find(kwd,LookIn:=xlValues, lookat:=xlWhole)

If Not f Is Nothing Then

firstAddress = f.Address

rowtar=f.row

列の転記開始。
0742デフォルトの名無しさん (ワッチョイ fa1e-U5aN)
垢版 |
2017/10/23(月) 19:29:34.06ID:hFeDPnm20
自分で勝手に名前を定義すんのやめれ。
それはシートじゃなくブックだろ

file = Dir(path & "○○(○*.xls")
で○○(○が先頭にあるファイル(この場合はブック)が取り出せるだろ?
ワイルドカードの意味判ってる?
0743デフォルトの名無しさん (スプッッ Sd7a-6gne)
垢版 |
2017/10/23(月) 19:32:17.16ID:wgR6kE8Td
確かにブックのことをシートと呼ぶ人は結構いるイメージ
0744デフォルトの名無しさん (ワッチョイ 7aeb-aYWJ)
垢版 |
2017/10/23(月) 19:36:45.84ID:dkpshLIu0
>>741
シート名が判っているなら
for each で探さなくても
set ws = Thisworkbook.worksheets(シート名)
でいい
0745デフォルトの名無しさん (アウアウカー Sadd-v+BU)
垢版 |
2017/10/23(月) 22:12:49.61ID:zesBlYdJa
>>712
http://madia.world.coocan.jp/cgi-bin/VBBBS2/wwwlng.cgi?print+200602/06020015.txt

他にもReadDirectoryChangesWを使った外人のサンプルは動いた。
けど、スレッド作ってるから危険なコードだね。
分かってる人が使う分には良いのかも知れないけどスレッド作らない方法を模索した方が良いんじゃないかなあ。
0751デフォルトの名無しさん (ワッチョイ 7aeb-KyXl)
垢版 |
2017/10/24(火) 07:57:40.89ID:PJuVne9A0
>>747
タスクスケジューラで定期的に調べるコードを動かす
0754デフォルトの名無しさん (スッップ Sd9a-9NUR)
垢版 |
2017/10/24(火) 08:51:30.78ID:wGosvaz7d
アンケート入力してもらった内容を別シートのA1セルから下に書き込んでいく仕様です。そして、それが共有ファイルだとします。
共有の場合、同時にA1セルに書き込む可能性があります。
既に書き込みされていた場合、一つ下のセルに書き込むようにしてエラーを回避したいです。
どうしたら良いでしょうか
0756デフォルトの名無しさん (ワッチョイ d681-0MKJ)
垢版 |
2017/10/24(火) 12:00:22.20ID:uQQcXNnv0
VBAのオートフィルタの構文について
構文例以下のコードになっているのですが、課題としては文字列の抽出で
オートフィルターを使用して、「商品名」が「パソコン(ノート)」のデータを抽出するコードを記述しなさい。
となっているのですが記述方法がわかりません。
教えてください。
C3からが商品名のオートフィルタになっています。
Dim TargetCompany As String
Dim StartDay AS Date
Dim EndDay AS Date

TargetCompany = "○○株式会社"
Starday = #10/1/2014#
Endday = #10/31/2014#

With ThisWorkbook.Worksheets("受注データ")
   .Range("B9").AutoFilter Field:=1,Criterial:">=" & Clng(StartDay)_
,Operator:=xlAnd,Criteria2:="<=" & Lng(EndDay)
.Range("B9".)AutoFilter Field:=2, Criteria1:=TargetCompany
End With
0757デフォルトの名無しさん (ササクッテロロ Sp85-KyXl)
垢版 |
2017/10/24(火) 12:21:39.09ID:SXPDSp16p
>>754
webアプリにする
0758デフォルトの名無しさん (ササクッテロロ Sp85-KyXl)
垢版 |
2017/10/24(火) 12:26:01.19ID:SXPDSp16p
>>754
データを格納するファイルと
そのデータを管理するファイルに分ける

データを管理するファイルでVBAを動かし
データを更新するときは更新中か否か判別する値を持つ

DBとDBMSのような関係
0759デフォルトの名無しさん (ササクッテロロ Sp85-KyXl)
垢版 |
2017/10/24(火) 12:29:03.80ID:SXPDSp16p
>>756
マクロの記録でオートフィルタの記録をとって見比べる
0762デフォルトの名無しさん (ワッチョイ ddb3-hp5j)
垢版 |
2017/10/24(火) 14:18:38.15ID:wq0WCN150
c#とか使わなくてもvbsでフォルダ監視するファイル作って実行させとけばいけるんじゃない?
c#かvb.net使っていいならFileSystemWatcher使えば希望通りのことが出来ると思います。
0767デフォルトの名無しさん (ワッチョイ f9cc-AYzn)
垢版 |
2017/10/24(火) 16:13:02.09ID:dMhREPrI0
Book1 Sheetあ Sheetい Sheetう Sheetえ
Book1 の Sheetう の中にボタンを作って、そのボタンを押すとエクセルの任意のブックを参照して
参照したブックのSheet1の内容をすべてコピーして、Book1の Sheetあ のA1を起点に張り付けたいです。
ご教授お願いします
0770デフォルトの名無しさん (ワッチョイ f9cc-AYzn)
垢版 |
2017/10/24(火) 16:28:26.33ID:dMhREPrI0
>>769
その都度変わります。
ですのでファイルを参照するウィンドウを開いて指定する方法ができると嬉しいです
0771デフォルトの名無しさん (アウアウエー Sa22-l25D)
垢版 |
2017/10/24(火) 17:46:03.13ID:B2D33UKaa
それ自体は難しくないと思います。
あとは、コピー元のブックがあるフォルダが決まってるかとかで多少変わってくるかと。
例えば常にカレントフォルダにあるとか、コピー先のブックと同じとか。
0773デフォルトの名無しさん (ワッチョイ ddb3-hp5j)
垢版 |
2017/10/24(火) 21:16:13.10ID:wq0WCN150
>>763
vbs

myFLD1 = "C:\監視フォルダ"
myFLD2 = "C:\コピー先"
myLimit = 3 '3分間監視する

Msgbox "監視スタート"
myTime = DateAdd("n", myLimit, Now)
myMEM = ""
With CreateObject("Scripting.FileSystemObject")
For Each myF In .GetFolder(myFLD1).Files
If InStr(1, myMEM, myF.Name & vbTab) = 0 Then
myMEM = myMEM & myF.Name & vbTab
End If
Next
Do
For Each myF In .GetFolder(myFLD1).Files
If InStr(1, myMEM, myF.Name & vbTab) = 0 Then
myMEM = myMEM & myF.Name & vbTab
.CopyFile myF.Path, myFLD2 & "\"
End If
Next
WScript.Sleep 500
If myTime < Now Then Exit Do
Loop
End With
Msgbox "END"
0775デフォルトの名無しさん (ワッチョイ d680-gbX+)
垢版 |
2017/10/24(火) 23:00:43.39ID:DfsEXCLh0
タスクランナーのGulp, Grunt, Jenkins とかを使えば?

毎秒フォルダ・ファイルを、watch して、タスクを実行する。
タスクでエラーが起きると、watchを解除する

タスクランナー → アプリ

自分でプログラミングすると、逆になる。
アプリ → タスク

エラー処理も、難しい
0776デフォルトの名無しさん (ワッチョイ 7aeb-KyXl)
垢版 |
2017/10/24(火) 23:04:46.31ID:PJuVne9A0
タスクスケジューラでいいように思うけど
0780デフォルトの名無しさん (ワッチョイ d681-0MKJ)
垢版 |
2017/10/25(水) 16:02:07.00ID:4LLWyKan0
VBAのステータスバーの表示方法について
課題でステータスバーを表示しなさいとなっているのですが割り算の問題?
なのかうまくひょうじできません。
基本は
Application.StatusBar = String(i, "■") & String(10- i, "□")
上記のコードでいいと思うのですが、
ステータスバーに進捗を表す"■"を表示する。表示する"■"の数は変数iの値を100で割った値とする
この、"■"の数は変数iの値を100で割った値とするの部分がうまくいきません。
やってみたのは下記のコードです
Application.StatusBar = String(Int(i / 100), "■") & String(Int(i / 100), "□")
ちなみに、Forの繰り返しは1から500です。
0781デフォルトの名無しさん (ワッチョイ 3a0e-HarP)
垢版 |
2017/10/25(水) 16:21:09.87ID:Qf3oRisb0
ちょっとお知恵を拝借したいと

Excel 2010で作業をしているのですが、
大量にあるシートにある非表示セルをとある事情で全て削除したいのです。

ただし、
・どの行・列が非表示になっているかはシート毎に異なる(むしろ、消したい行・列を非表示にして、マクロで消すことが考えられる)
・場合によってはSpecialcells(xlCellTypeLastCell)で拾えるセルより下/右の行/列が非表示になっている可能性がある
 (使用されているセルはAD250までだが、非表示セルがAF列や300行に設定されていると上手くいかない。
  または、AA:ADが非表示だとZ列が拾われてしまう。)
・どれくらい下/右まで使用されているかは必ずしも分からない(さすがに、1000行は使わないと思うが、断言できない)
という問題があります。

数十から百程度のシートがあるので、10000行500列のような数を処理するのは時間がかかるため、
できる限りチェックは最小圏で済ませたいのですが、いい方法はありませんでしょうか。
0782デフォルトの名無しさん (ワッチョイ 7af2-aYWJ)
垢版 |
2017/10/25(水) 16:54:42.17ID:FTD//1X/0
>>781
ブックをzipとして解凍して出てきたxml
(\Book\xl\worksheets\sheet1.xml とか)
の中身みると
<col min="16374" max="16374" width="0" hidden="1" customWidth="1"/>
みたいな感じでどの行、列が非表示なのか書いてあるからそれを拾うとかどうよ
0784デフォルトの名無しさん (ワッチョイ bab3-DBD/)
垢版 |
2017/10/25(水) 17:08:25.65ID:0GYD+24d0
>>781
ドキュメント検査の中に非表示の行・列を削除する機能がある

VBAなら
If Columns(ColumnNumber).Hidden = True Then Columns(ColumnNumber).EntireColumn.Delete
If Rows(RowNumber).Hidden = True Then Rows(RowNumber).EntireRow.Delete
をそれぞれ列数・行数分
0785デフォルトの名無しさん (ワッチョイ 3a0e-HarP)
垢版 |
2017/10/25(水) 17:24:35.66ID:Qf3oRisb0
>>782
xmlにそんな記載があるんですか。
確かにそれなら出来そうですが、それを解釈させるマクロを書くのは面倒くさそうな感じですね
それに、拡張子をzipに変えるとxmlが取り出せるというのを知らない人は多そう
(自分が使うために作るんですが、欲しいと言ってる人にあげる予定なので、難しいことは抜きにしたいかな…)

>>784
実務的にはそれを For … To … Step -1 で回すか>>782で調べたものを使うんでしょうが、
そこが問題なんですよね…

ところで、Columns(ColumnNumber)ってRangeオブジェクトを返すと思うのですが、
EntireColumnが必要なんですか?
いえ、Rows、Columnsあたりはよく分かってない部分があるので、自分の認識不足かも知れませんが。
■ このスレッドは過去ログ倉庫に格納されています

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