Excel VBA 質問スレ Part75

■ このスレッドは過去ログ倉庫に格納されています
2022/02/09(水) 14:24:32.62ID:I0u44nFvd
!extend:checked:vvvvv:1000:512
!extend:checked:vvvvv:1000:512
↑2行に減ってるけど、同じ内容を3行に増やして貼り付けるナリ

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

※前スレ
Excel VBA 質問スレ Part74
https://mevius.5ch.net/test/read.cgi/tech/1639932059/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
2022/02/15(火) 18:55:31.55ID:MJaSxl0D0
>>89
オートフィルタで空白以外にして、コピーペースト

Sub Macro1()
最終行 = Cells(Rows.Count, 1).End(xlUp).Row
'オートフィルタの後にコピー
Range(Cells(1, 1), Cells(最終行, 11)).AutoFilter
ActiveSheet.Range("$A$1:$K$6").AutoFilter Field:=3, Criteria1:="<>"
Columns("A:K").Select
Selection.Copy

'mに貼り付けてフィルタ解除
Range("M1").PasteSpecial
Application.CutCopyMode = False
Selection.AutoFilter
End Sub
2022/02/16(水) 09:01:55.23ID:r3Bj6a+b0
>>90
確かにそうですね 別ファイルにC列にデータがある行のみをエクスポートするようなものを作ろうとしていたので
C列にデータがあるかの判断→あればコピー→エクスポート先との差分のみを貼り付け
としようとしています
差分の貼り付けは参考になりそうなコードがあったのでそれと組み合わせて考えようと思っていました

>>91
ありがとうございます、シンプルで応用が利きそうで助かります

>>92
その発想はありませんでした、ありがとうございます
2022/02/16(水) 21:42:26.46ID:jzL/oN3O0
選択した範囲のセルから、「セルの色」と「文字」で絞った数を調べたいのですが、どのように書けば宜しいでしょうか?
(色に関しては、指定したセルの色を参照したいです。)

例:A1〜D10の中で、E1と同じ色で、「テスト」と書かれているセルの数
みたいなことです。

出来ればグーグルのスプレッドシートでも使いたいです…
2022/02/16(水) 22:02:32.25ID:tqdkY3B80
>>94
GASは全然書けないんだよなぁ

Sub foo()
Set 検索範囲 = Range("a1:d10")
Set 検索 = Range("e1")
カウント = 0
For Each test In 検索範囲
If test.Interior.Color = 検索.Interior.Color And _
test.Value = 検索.Value Then
カウント = カウント + 1
End If
Next
MsgBox カウント
End Sub
2022/02/16(水) 22:17:26.65ID:VM6eHjoj0
>>94
べたに指定範囲のセルをループ回して比較すればいいんじゃね
Sub test()
MsgBox CountX(Range("A1:D10"), Range("E1"), "テスト")
End Sub

Function CountX(target As Range, colorCell As Range, str As String)
Dim count As Integer
Dim c As Range
For Each c In target
Debug.Print c.Interior.color
If c.Text = str And c.Interior.color = colorCell.Interior.color Then
count = count + 1
End If
Next
CountX = count
End Function
こんな感じか
2022/02/16(水) 22:19:34.63ID:VM6eHjoj0
ああ、ほぼ被った上にDebug消し忘れてる
2022/02/17(木) 15:22:29.06ID:BBg74W1Zd
fileSystemObjetを使うときに下のコードのようにインスタンスを格納する変数を省略できるのはなぜですか?
ひょっとしてwithでくくるときに一時的に作られる変数にでもいれているのでしょうか?

with New fileSystemObject
ステートメント
End With
2022/02/17(木) 15:49:10.52ID:Lj9EVaDX0
>>98
> ひょっとしてwithでくくるときに一時的に作られる変数にでもいれているのでしょうか?
まあそう言うこと
RegExp とかでも使える
2022/02/17(木) 16:14:35.03ID:8LWMZH0T0
>>98
どんなオブジェクトもwithの一時変数に入れられるよ
ほかによく使われるのはブラウザコントロールとか
2022/02/17(木) 16:21:30.38ID:lbVsnXnA0
このwithが参照してるオブジェクトって確認する方法ありますか?

Sub foo()
With Cells(1, 1)
Debug.Print .Value
End With
End Sub

とりあえずウォッチ式に「.value」入れてみてもエラーで見れなかった
with と入れてもエラー
どこに格納されているんだろう
2022/02/17(木) 17:02:27.81ID:8LWMZH0T0
>>101
VBだとGetTypeで取得できるんだけど、VBAにはないね
2022/02/17(木) 19:16:24.68ID:uTvXTdo20
>>101
内部的に一時変数に保存されているが、ユーザからは直接参照できない
ウォッチ式はどうもWithのスコープ外の扱いっぽいな

>>102
暗黙的に参照されているものが自分自身を返すようなメンバを持ってないかぎり
Withで暗黙的に参照してる変数そのものを確認する方法はなかったはず
おそらくVBにもなかったはずだけど

個人的には参照できないWithはつかわないのが作法じゃないかと
俺はWith New否定派だ
2022/02/17(木) 20:01:56.20ID:lbVsnXnA0
>>102>>103
ありがとう
with、どうにもモヤッとした感じが取れないな

Meかparentでメモリ追っかけられそうな気もしたけど、うーん難しそう
2022/02/17(木) 20:37:40.67ID:oZh0IyxXd
配列に値を保存しておいて、別シートの特定セル範囲に値を入れたいんだけど、
Worksheets("シート名").Range("A1:A10").Value =配列
だとエラーが出ます。

仕方なく、シート移動してから
Range("A1:A10").Value =配列
で値を入れてから元シートに戻る処理をしてるんですが、他にいい方法ありませんか?
2022/02/17(木) 20:39:35.05ID:rEGDS72/0
何てエラーが出る?
2022/02/17(木) 20:43:06.54ID:od7uaDdG0
なんのエラーか分からんから手っ取り早いのは
先にWorksheets("シート名").activateしておけば
2022/02/17(木) 20:52:49.10ID:oZh0IyxXd
曖昧な情報ですみませんでした。

WorkSheets(”シート名”).Range(cell(変数,1),cell(変数,20)).Value =配列
だと

実行時エラー'1004':
アプリケーション定義またはオブジェクト定義のエラーです。

となります。

Worksheets("シート名").activate
Range以下同じ

だと正常に動作します。
数百のデータ取得転記なので、可能であればシート移動は減らしたいと考えています。
2022/02/17(木) 20:56:15.04ID:4vzfA+8GM
Rangeの後のCellsにもシート指定が必要
2022/02/17(木) 21:03:41.49ID:lNAQUSmM0
それ案外忘れやすいよな
2022/02/17(木) 21:06:37.67ID:Lj9EVaDX0
>>108
>>109 の言う通りで
With WorkSheets(”シート名”)
.Range(.Cells(変数, 1), .Cells(変数, 20)).Value =配列
End With
が定番
2022/02/17(木) 21:19:48.40ID:lbVsnXnA0
>>111
setの方が好きだわ

set ws = WorkSheets(”シート名”)
ws.Range(ws.Cells(変数, 1), ws.Cells(変数, 20)).Value =配列
2022/02/17(木) 21:56:36.84ID:bEhlAQ9Hd
>>109-112
正しくそれが原因でした。
ありがとうございました。

先日>>46で質問させて頂いた者ですが、教えていただいたものをベースにかなり形になってきました。
数値を1個ずつ転記するのと、配列に入れて転記するのって処理時間にかなり差があるんですね。
2022/02/17(木) 22:14:24.38ID:Lj9EVaDX0
>>113
シートへの読み書きはかなり遅いからデータが大量にある時は配列に一気に読出して配列上で処理して一気にシートに書出すのは定番の高速化手法
2022/02/17(木) 22:24:21.56ID:bEhlAQ9Hd
1人30項目×数百人だったので、まずは1人分を配列に入れて転記するようにしただけで数倍早くなりました。
このようなケースだと、さらに30×人数全てまとめて配列に入れて転記するものなんでしょうか?
2022/02/17(木) 22:29:04.03ID:Lj9EVaDX0
ケースバイケースだけど30列×数百行程度なら全体を一気に読み書きしてもいいと思う
2022/02/17(木) 23:14:43.35ID:lbVsnXnA0
>>115
数倍といっても、1秒が0.1秒になっても、実質何も変わってないのと同じ
そのためになれない配列を使ってコードを書く時間が5分長くなるようなら、そんな最適化はせんでいいってことになる
30分が3分になるなら、やったほうが良いだろう

要は総合的に見て、全体的な時間が減るなら最適化したほうが良い
死ぬほど暇なら、暇なときにどんどんやっておけば、忙しくなったときに余裕が出る
2022/02/18(金) 00:01:31.11ID:kIxJDUOP0
1秒と0.1秒の体感時間の差は意外とでかいぞ
短くできるならしたほうがいいわ
2022/02/18(金) 03:42:39.82ID:E/I/ujWM0
>>115
プログラムを大幅に書き換えなくても、再描画と再計算とイベントを止めるだけで速くなることもあるんでいっぺん試してみ
2022/02/18(金) 06:33:19.64ID:uvosISh90
>>104
Withはそういうもんだと割り切るしかない。
VB系以外で見たことないからVB系特有なもんだと思う。
昔、旧VB6のスレでWith NewってやるとC#のUsingみたいにEnd Withで勝手にObjectの開放してくれるので、
そういう使い方をするコードが書かれたとき賛否両論だったのを覚えてる。

Withも、もしVB系の言語が将来生き続けることになっていたら負の遺産みたいに言われていたかも知れないけど、
Visual Studio CoreでマイクロソフトもVB.Netはもう発展させないことを明言しているから
そっちの開発している人は適当なところで別言語やるようになるだろうね。
2022/02/18(金) 08:19:03.35ID:v2iRKHri0
>>120
>そういう使い方をするコードが書かれたとき賛否両論
そうなるだろうね
割り切って使う人には便利かもしれないけど、捉えきれない部分があるのはかなり気持ち悪い

ありがとう、スッキリした
2022/02/18(金) 09:18:41.84ID:k4bZDTy80
>>120
> VB系以外で見たことないからVB系特有なもんだと思う。
Pascal からの輸入だろ
2022/02/18(金) 15:45:36.50ID:Sc8nOBZDd
>>99>>100
すっきりしました。ありがとうございました
2022/02/18(金) 16:04:07.81ID:+5TWcNgJM
C++系でクラスメンバーに _ 付けたりするよりは . 強制のVB のがわかりやすい
2022/02/18(金) 16:12:26.42ID:mnS8isni0
VBとVBAを混同してしまう
2022/02/18(金) 17:12:34.16ID:9dJRbxWs0
VB更新止めるならビジュべー7作ったらVBAからの乗り換えで大人気になるかも
本職の人は発狂しそうだけど
2022/02/18(金) 17:40:13.70ID:v2iRKHri0
ならんよ
2022/02/18(金) 18:34:46.08ID:9dJRbxWs0
>>127
4文字で撃破 笑
2022/02/18(金) 21:31:15.96ID:/GJYcSex0
イベントでメッセージボックス起動するだけじゃ
進む戻るの履歴は消えないんだな
良かった良かった
2022/02/19(土) 00:17:14.09ID:mx39evoXM
RelaxTools AddinからTortoiseSVNに繋げる方法が
バージョン管理の手法としての最善策ですか?
2022/02/19(土) 01:15:29.08ID:1GYJVttN0
そういやvbaでバージョン管理っていい方法あるのかな
ドロップボックスに丸投げしてるからよく知らないや
2022/02/19(土) 02:51:28.34ID:evvGZLor0
昔はOFFICE DEVELOPERとかいうのがあって、たしかVSSだったと思うがバージョン管理できた
ACCESSとか2007ぐらいまではTFSにつなぐアドインもあった

この辺の仕組みって、基本的にはソース管理プロパイダで差し替えできるようになってたはずなんだがなぁ
あんまり情報もないんだよな
2022/02/19(土) 05:57:33.40ID:GK0tMJPG0
Microsoft製バージョン管理システム
VSS(ソース管理はVSS)

TFS(ソース管理はTFSまたはVSS)

AzureDevOps(ソース管理はGitまたはTFS)
2022/02/19(土) 07:12:39.37ID:sDFYuIo+M
TFS(TeamFoundationServer)は製品名
ソース管理はTFVC(TeamFoundationVersionControl)
2022/02/19(土) 07:37:52.31ID:GK0tMJPG0
>>134
間違った理解で適当なこと書き込んですまなかった
確かにTFVCと呼ぶ方が正しいな
https://i.imgur.com/m6FXGvC.png

https://docs.microsoft.com/ja-jp/azure/devops/repos/tfvc/comparison-git-tfvc?view=azure-devops-2020
2022/02/19(土) 09:03:14.67ID:5qKPM2PV0
SVNで間に合ってる
2022/02/19(土) 09:23:14.09ID:VKF1jqEnM
時々のマクロファイル保存で間に合ってる
2022/02/19(土) 10:11:08.00ID:1GYJVttN0
vbaでそんな巨大プロジェクト作らないから、ドロップボックスでいいかな・・・
2022/02/19(土) 10:47:12.21ID:1AFURcFW0
マイクロソフト製品なんだから
One Driveでいいだろ
2022/02/19(土) 11:07:16.61ID:gdvHyp150
ちゃんとやるのは最初だけ
2022/02/19(土) 11:11:58.36ID:1GYJVttN0
One Driveはバグが多すぎるから絶対に無理w
2022/02/19(土) 11:33:30.74ID:7kiLsofr0
バージョン管理なんてエクセルファイル名にver1.0とか含めておけばいいんじゃないの?
2022/02/19(土) 11:37:15.90ID:1GYJVttN0
売上報告_最新_最終版コピー(2)_old決定版.xlsm
2022/02/19(土) 11:54:53.81ID:x/upE6G90
>>141
どんなバグがあるの?
2022/02/19(土) 12:05:18.04ID:1GYJVttN0
>>144
復元できないという致命傷
onedrive バグ などで検索すると出てくるよ
先週ぐらいもあった
2022/02/19(土) 14:20:31.32ID:4xnJtOkW0
回答を待たずに見切り発車でTortoiseSVNを導入しようとして
サーバーエラーの解決ができずに数時間のたうち回っている

バージョン管理なんておいらには高等技術過ぎたかもしれねぇ…
2022/02/19(土) 14:35:17.05ID:x/upE6G90
>>145
同期関連か、まあそれを信用するのは時期尚早やな
2022/02/19(土) 15:26:08.63ID:1GYJVttN0
>>146
TortoiseSVNは割とガチ環境。導入のハードル高いからマジでやめたほうがいいぞ
ドロップボックスか、googleドライブに同期させておくぐらいがちょうど良い

バージョン管理って大層なものを導入しなくても、
コードの中に「xxまで実装した。残りyy」みたいに書いておけば
それなりに使いやすいバックアップになる

どうせVBAなんてブランチ切るとかそんなことしないから一本道でヘーキヘーキ
2022/02/19(土) 15:26:52.07ID:1GYJVttN0
なお俺もTortoiseSVN挑戦して挫折した一人
かなり癖あった気がする
2022/02/19(土) 15:41:34.88ID:evvGZLor0
まあいまどきならgitが楽でいいんじゃね
サーバ側でなにもしないならファイル共有さえすればバージョン管理サーバとして使える
VBAはエクスポートしてバージョン管理だな。そこまでする必要があるものは少ないけど

>>142
エクセル丸ごとで管理するだけならな
ソースの修正箇所の履歴とか差分とかとるときにバージョン管理が必要なんだよ
2022/02/19(土) 16:13:02.46ID:x/upE6G90
>>146
自分一人で使うならサーバーなんて要らんよ
リポジトリをローカルファイルシステムに作ればいいだけ
外部参照とかの一部の機能が使えなくなるけど
具体的な操作は流石にスレチだから聞きたいならこちらで

バージョン管理システムについて語るスレ10
https://mevius.5ch.net/test/read.cgi/tech/1393147031/
2022/02/19(土) 16:22:07.18ID:5qKPM2PV0
TortoiseSVNはクライアントだよぉ
サーバーわかんないならgit hub使えば良いんでない?
153デフォルトの名無しさん (ワッチョイ 6fda-ZHzO)
垢版 |
2022/02/19(土) 16:40:13.61ID:71RYd9t40
gitとsvnはなんか概念違うから最初にsvnから入るとgitが分かりにくくなるって聞くな
2022/02/19(土) 16:57:02.53ID:V3h8uUoVM
概念というかポリシーが違うから馴染めないというのはあると思う
Linux みたいな巨大なアプリでなきゃ SVN の速度でもたいして困らんし
2022/02/19(土) 17:18:28.82ID:PJU9YEhh0
Excel板覗いてきたけど、関数を入力するときに=+って入力している人がいた。それはマニアな人だよね?
2022/02/19(土) 17:37:22.02ID:1GYJVttN0
>>155
それ俺なんだけど、
・「=」の売り間違えが嫌い
・「+」は絶対に打ち間違えない
ので、
数式は
+A1-B1
と入力してる
excelの仕様上、+で始まっている数式には更に=が追加される模様
2022/02/19(土) 17:56:27.92ID:sU8KQZKj0
世の中に絶対など無い・ある どっち?
2022/02/19(土) 17:59:47.25ID:8XK4gjnm0
ない
2022/02/19(土) 18:11:04.25ID:PJU9YEhh0
たまに+で入力している人見るから。ちょっと思い出して
2022/02/19(土) 18:48:24.57ID:wlwakG6U0
>>148
私はドロップボックスに RCS のレポジトリを置いていたのですがユーザー認証が厳しくなったときにレポジトリ全部がおじゃんになってしまいました、これは痛い、痛すぎる…
もう懲りてバージョン管理システムを使わなくなってしまった…

そろそろ git をはじめようかと思案中です
2022/02/19(土) 18:58:23.53ID:lALNUlVh0
絶対など絶対にない!
162デフォルトの名無しさん (ワッチョイ cfda-fLiC)
垢版 |
2022/02/19(土) 21:45:46.48ID:gdvHyp150
絶体絶命でも死なない
2022/02/21(月) 01:45:01.56ID:OrVm1a1F0
絶対領域ならある
2022/02/21(月) 02:37:10.15ID:i+Nk/hZw0
絶対可憐
2022/02/21(月) 02:52:14.84ID:OIlsWcuQ0
絶対音感の自分が通りますよ
2022/02/21(月) 06:15:17.92ID:9b7axwXE0
絶対運命黙示録
2022/02/21(月) 08:43:58.11ID:uSPFSI8K0
絶体絶命
2022/02/21(月) 09:01:35.23ID:n81sYxUz0
絶対なんて言葉、VBA上では絶対値くらいちゃうの?
複数Shape並べる時とかの座標を絶対値にするかLoop中の計算追い寸にするかいつも迷う
2022/02/21(月) 10:12:19.05ID:i+Nk/hZw0
絶対参照⇔相対参照ってのもあるぞ
現実に「絶対」はないとされてるけど、コンピューターの世界では割とよく出てくる言葉の一つ
2022/02/21(月) 13:18:00.34ID:zel+kn1IM
>>169
その絶対は意味合いが違うと思うぞ
2022/02/21(月) 13:31:12.92ID:2STuN7VvM
絶対零度を超えると時間が巻き戻るからな
2022/02/21(月) 13:49:17.52ID:V2QoZaN/M
絶対値、絶対音感、絶対領域は形容詞
絶対参照、絶体絶命は形容動詞

区別する方法は、後半が動詞になるかどうか、つまり「参照する」「絶命する」はあるけど「音感する」「領域する」とは言わない
2022/02/21(月) 14:04:18.08ID:4epPW0O6a
>>169
言葉や概念としての「絶対」があるかといえばある
2022/02/21(月) 14:40:29.16ID:zel+kn1IM
>>172
なぜ有能がここに迷い込んできたのか
2022/02/21(月) 14:41:00.68ID:IVAAebPQ0
>>172
すごい(語彙)
2022/02/21(月) 16:13:18.73ID:kWGdoALl0
全部名詞やん
2022/02/21(月) 20:31:11.80ID:8rVxF2Gw0
絶対に負けられない戦いに負けたらどうなる?
2022/02/22(火) 00:40:55.58ID:OzXpMxHE0
それが今の日本です
2022/02/22(火) 16:24:40.19ID:0TsP51M+0
Excelコンテストで勝つ!
2022/02/22(火) 16:51:35.21ID:9f6q+kU90
なんぞ? と思ったら一昔以上も前のぢゃねーか!
https://xtech.nikkei.com/it/pc/article/knowhow/20090109/1011183/
こういうことやり続けてきたから間違ったExcelerが繁殖しちまったんぢゃねーのか?
なあにが 営業成績表彰システム ぱ か ぱ か だっつーの  遊んでんぢゃねぇよ!
2022/02/24(木) 14:20:26.28ID:PuX8FwU40
同じpcに開かれている別のエクセルのプロシージャを実行することてできる?
2022/02/24(木) 14:23:40.68ID:pVKiKajRM
同じプロセスなら普通にできるだろ
2022/02/24(木) 18:15:16.40ID:iej9QTZYa
普通のExcelの質問していいですか?
2022/02/24(木) 18:16:27.79ID:ozL7dLyM0
どうぞ
2022/02/24(木) 18:33:03.41ID:iej9QTZYa
ありがとうございます!
日付だけを縦にずっと入力していくのですが、じょうごマークで絞り込みを開くと
「2022年」「1月 2月…」とあり、「1月」の「+」マークを開くと更に日付が「1日 2日 3日…」と
入力したものがでてきますよね。その「+」マークを開かなくても2022年と同じ左詰めで「1月3日」というのがあって
1/3だけ半角で何度入れ直しても「2022年」「1月」の中に入らないんです。
しかも「1月」の「+」マークを開いても「3日」があり、絞り込むと左詰めの「1月3日」と同じ項目が出てきます。
意味が分からなかったらすみません。分かる方いらっしゃったら教えてください。
2022/02/24(木) 18:48:46.05ID:ozL7dLyM0
>>185
文字列になっている
・他の日付セルをコピーして、その左詰め1/3に貼り付け
・もう一度2022/1/3と打ち直す
それでもう一度試すとどうなるか
187デフォルトの名無しさん (ワッチョイ cf8e-vY7U)
垢版 |
2022/02/24(木) 20:31:45.10ID:exGzm3wL0
>>185
スレタイ読め
消えろ
2022/02/24(木) 20:51:03.24ID:N8+11+jZ0
うーわ! 余裕無えー よっぽどストレス溜まってんだなあ 追い詰められてんだろうなあ、社内で
2022/02/24(木) 21:02:21.44ID:K0Kp1JdiM
>>186
おおおー!文字列になってるんですね、なるほど!明日会社でやってみます!
ご親切に教えていただきありがとうございました。

このスレの方すみませんでした。ありがとうございましたm(_ _)m
2022/02/24(木) 21:22:25.12ID:OIkOwNi30
>>187
おまえなんか話題振れよ
2022/02/24(木) 22:13:31.53ID:Nlim82gmM
さっき電車の中で向かいに若い女性の二人組が座っててさあ
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。