Excel VBA 質問スレ Part75at TECH
Excel VBA 質問スレ Part75 - 暇つぶし2ch2:デフォルトの名無しさん
22/02/10 10:32:50.12 NHAjzQuTa.net
>>1


3:デフォルトの名無しさん
22/02/10 15:15:12.01 nfSYASk10.net
時々お世話になっています。
方針を確認したいです。
やりたい事は、特定のフォルダを指定して、その中にあるフォルダ・ファイルの中から最新の更新日を取得する
です。
今考えているやり方は、
①特定のフォルダを取得する(エクセル内にパスの指定あり)
②サブフォルダを含むすべてのフォルダパスを取得
③サブフォルダを含むすべてのファイルパスを取得
④取得したフォルダパスとファイルパスの最新更新日時を取得
⑤その中から一番最新の日時を取得
です。
他に簡単な手順ってあるでしょうか?
ヒントでもいただけるとうれしいです。
よろしくお願いします。

4:デフォルトの名無しさん
22/02/10 15:37:12.23 x6E7pXvm0.net
powershellならこれだけなんだが
ls -recurse|sort-object -property LastWriteTime -Descending|select-object -First 1


5:|%{$_.LastWriteTime} VBAからpowershell呼び出せば?



6:デフォルトの名無しさん
22/02/10 15:44:08.91 M1zV1i+Cd.net
>>3
一般的だと思うけどフォルダ内の検索はそれ自身を一つの関数Aにしてその関数の中で関数Aを呼び出すと思う
関数は例えばこんな感じ Sub ProcA(ByVal pFolder As String, ByRef pDate as Date)
中はこんな感じどっちが先でも構わない
pFolder内のフォルダ一覧を取得してフォルダ分ProcAを呼ぶ
pFolder内のファイル一覧を取得して最新日時をpDateに戻す
なので手順は
①特定のフォルダを取得する(エクセル内にパスの指定あり)
②ProcAを呼ぶ(これでサブフォルダ内も含めて全部検索してくれる)
③pDateが最新日時

7:デフォルトの名無しさん
22/02/10 15:50:58.22 M1zV1i+Cd.net
>>4
これだとフォルダの日時も対象になってしまわない?

8:デフォルトの名無しさん
22/02/10 16:04:20.32 nfSYASk10.net
>>4
ありがとうございます。
powershellだとそんなに短くなるんですね・・・
ただ私を含め、powershellに詳しい人が周りにいないのと、
私が死んでもメンテナンスできる状態にしておきたいので、今回はVBAで作成をしたいです。
(でもそのコードは保存させていただきます。)
勉強になります。ありがとうございます。

9:デフォルトの名無しさん
22/02/10 16:09:01.41 nfSYASk10.net
>>5
ありがとうございます。
処理時間が短くなって良さそうですね!
こちらの方向で考えてみます!
ありがとうございます!

10:デフォルトの名無しさん
22/02/10 16:10:41.24 nfSYASk10.net
>>6
今回はフォルダの更新日時も取得したかったので、
powershellが使えればこのコードが有効だったと思います。
私の勉強不足で残念ですが・・・

11:デフォルトの名無しさん
22/02/10 16:25:27.01 J5PrGMnU0.net
Ruby のglob では、** で、フォルダ以下を再帰的に処理する
# 絶対パスのディレクトリ名の後ろに、* を付けること!
# . で始まる、隠し directory, file を除く
glob_pattern = "C:/Users/Owner/Documents/test/**/*"
puts Dir.glob( glob_pattern )
.select { |full_path| File.file?( full_path ) } # ファイルのみ
.max_by { |full_path| File.mtime( full_path ) } # 更新時刻が最も最近のファイルパス

12:デフォルトの名無しさん
22/02/10 16:53:52.57 jnAzFgRy0.net
前スレで「VBA内で今まで使えてたKillが急に使えなくなった」野郎ですが、システムの復元で先月に戻したら直った。
たぶんOfficeの最新のアップデートがクソ。
VBA内で作って使い終わったADODBを削除する部分。
10年くらい使い続けてるし、connectionとかちゃんとcloseしてるのに。

13:デフォルトの名無しさん
22/02/10 18:14:16.34 lf0ILJru0.net
>>7
そもそもVBAで作る意味がわからんが
自分で作れもしないものを俺が死んでもメンテしろとか...

なにをやるかだけをドキュメントなりコメントなりで残せよ
あとの人はそれ見て自分でできるやり方でやればいいだけ

14:デフォルトの名無しさん
22/02/10 18:19:09.16 nfSYASk10.net
>>10
Rubyでもそんなに短くなるんですね。
もしかしてVBAが一番大変なんじゃないかと思えてきます。
すみません。Rubyは私が全く使えないため、今回は見送らせていただきます。
コードまで記載していただいたのに申し訳ないです。
ありがとうございました。

15:デフォルトの名無しさん
22/02/10 18:22:09.15 lf0ILJru0.net
ふと思ったが、ファイル列挙を再帰で処理するときになにも考えずに
うっかり上位フォルダへのショートカットとか処理したらループするのな
素のVBAでやるならDir関数だろうけど、これショートカットとかどう処理するんだろ

16:デフォルトの名無しさん
22/02/10 18:23:45.71 nfSYASk10.net
>>12
VBA(エクセル)であれば多少使える人が周りにいるため、メンテナンスが可能だと思いました。
自動化した処理はコード内のコメントでも残しますし、ドキュメントにも記載します。
>>自分で作れもしないものを俺が死んでもメンテしろとか...
 これは確かに・・・自分で作れていない以上ぐうの音も出ません。

17:デフォルトの名無しさん
22/02/10 18:27:43.99 Cq74F0AH0.net
こんな簡単な処理もできないのにVBAならできると言うか

18:デフォルトの名無しさん
22/02/10 18:56:39.50 M1zV1i+Cd.net
>>14
VBA内のコードだけならそうだろうけど今風だとFileSystemObject使うかもね
自分はフォルダ検索とか嫌って程使うツールを作ってるから検索用のライブラリずっと使いまわしてるわ
>>15
VBAなんて所詮俺ツールぐらいの気持ちで考えて自分が死んだら使わないでねぐらいでいいと思うけどね

19:デフォルトの名無しさん
22/02/10 19:15:17.51 tWYuVSEa0.net
>>3
Power Query で親のフォルダ指定すると、サブフォルダも含めた
ファイル名、拡張子、アクセス日時、更新日時、作成日時、パス
の一覧を作ってくれる。
作成日時か更新日時で降順して1から始まるインデックス付けて、
BinaryとかRecordの余計な列は削除して、クエリーテーブルとしてsheetに読込ませたら、
あとは外のセルからINDEX・MATCH関数で
「インデックスの列が1」の行のパス&"\"&ファイル名を表示させる。
VBAはこのbookを開いたときにクエリー更新させるとか、
ボタンでクエリー更新させるとか。
Power Query内にセルに指定したフォルダパスを取り込むときは
そのセルを名前定義しておいて、
let
 定義名 = Excel.CurrentWorkbook(){[Name="定義名"]}[Content]{0}[Column1],
 ソース = Folder.Files(定義名)
in
 ソース
これが元ネタ
URLリンク(stackoverflow.com)

20:デフォルトの名無しさん
22/02/10 19:24:51.89 hZgX7eKD0.net
>>15
たとえばエクスプローラー開いて
フォルダ指定してから右上の枠に 更新日時:>2022/1/1
って入力すると2022/1/1 以降のファイル一覧とか見れるよ

21:10
22/02/11 13:48:46.29 901NTZe+0.net
処理が複雑になるにつれて、より本格的なプログラミング言語に変えていかないといけない。
これを適材適所・目的別最適化と言う
小中高大学みたいなもの。
VBAが小学生の宿題なら、Rubyは大学生の宿題
VBA > PowerShell, Bash > Ruby
これが分からない会社は、すべてのシステムをVBAで作って、
色々なモジュールを共通化して、
会社の資産にしてみたいに発展させていって、最後には破綻する
維持・保守コストが膨大になって、おまけに低品質で、誰も修正できなくなる
システムみたいなものは修正・保守必須で本格的なものだから、
Rubyみたいなプロ用の言語じゃないとダメ
ちょっとした秀丸マクロとか、そういうのはダメ。
適材適所・目的別最適化みたいな事を分かっていない会社が多すぎる

22:デフォルトの名無しさん
22/02/11 13:55:56.83 ZK+oZ0Mxd.net
不等号が逆な時点で説得力ゼロ
矢印のつもりなら、さらに頭が悪いとしか思わん

23:デフォルトの名無しさん
22/02/11 13:58:55.07 z1hZYaqu0.net
www

24:デフォルトの名無しさん
22/02/11 14:17:29.48 LtQN2K+P0.net
だってルビキチだもん

25:デフォルトの名無しさん
22/02/11 14:33:23.73 uXHB2mBC0.net
無意味な喩えする奴頭悪いから嫌いなんだよね

26:デフォルトの名無しさん
22/02/11 14:47:23.80 4kl07p+n0.net
>>21
ほんとに逆なのお?

27:デフォルトの名無しさん
22/02/11 14:48:15.45 AGDJERK+d.net
そもそも自社開発するようなスキルを持ち合わせてるならそんな三択じゃない他のを選ぶだろうにw
RubyRuby言ってる人はそれしかできないのかね?w

28:デフォルトの名無しさん
22/02/11 15:17:29.69 dkQ+i8pZM.net
VBAもRubyもPwerShellもVSCodeも、片手間のちょっとしたツールを作るには便利だけど、がっつりアプリの開発には使えんわ
みんな同レベル
あとは適切に使い分けできるかという、使用者の頭脳レベルの問題

29:デフォルトの名無しさん
22/02/11 15:23:45.94 +e4i5uLyd.net
なんでVSCode出てきた

30:デフォルトの名無しさん
22/02/11 15:53:04.17 EfY4NLKC0.net
まだRubyキチガイ居るのか…
何年他の言語スレに粘着してるんだ

31:デフォルトの名無しさん
22/02/11 16:07:37.46 1hOwJ8um0.net
お前らみたいに相手する奴居るからだろ…

32:デフォルトの名無しさん
22/02/11 16:11:41.66 AGDJERK+d.net
>>28
知ってるの並べただけでしょ

33:デフォルトの名無しさん
22/02/11 16:37:33.68 EYT5V/+O0.net
>>20
突っ走り過ぎ
何もできないとVBA出来るは違う
ないとあるはかなり違うんだよ
シロウトが自由にPCを動かせるようになるVBAには価値があると思うよ
VBAで不足と感じだしたら他言語化を模索するようになるんじゃないかな?
自分がそうだし

34:デフォルトの名無しさん
22/02/11 19:56:50.35 /HLRVZix0.net
オワコンRuby

35:デフォルトの名無しさん
22/02/11 23:02:03.22 AZTvSWvg0.net
いつ始まってたの

36:デフォルトの名無しさん
22/02/12 10:46:52.90 TWE+IO3i0.net
C#、Python、Javascript、Rust辺りはともかく
Rubyはないわー

37:デフォルトの名無しさん
22/02/12 12:29:03.80 zSrTwFpP0.net
Perlと同じく消えるRuby

38:デフォルトの名無しさん
22/02/12 18:19:04.47 rN9arOXg0.net
>>34
10-15年ぐらい前は結構盛り上がってた気がする
PHPの代わりにサーバーはruby、pythonの代わりにrubyで計算、ゲームは・・・苦手だった気がする
色々できて便利な言語という触れ込みだった
で、総意は「ロクなライブラリもないし、器用貧乏な言語に変える必要がない」だった

39:デフォルトの名無しさん
22/02/12 18:19:52.19 rN9arOXg0.net
しかし最後にこんなキチガイに言語を潰されるのは、さすがにちょっと不憫かなーとは思う

40:デフォルトの名無しさん
22/02/12 18:47:01.50 J0OyCaZ00.net
使いたければ黙って使っていればいいのにここに書くことじゃない
よそでやれ

41:デフォルトの名無しさん
22/02/12 23:09:11.76 8DXM8GTy0.net
すみません、スレみて質問していいのかと思いましたが、相談に乗ってください。
予定の10日前になったらセルの色変え、
(予定日前まで色変えで)予定日、予定日以降は色無しとしたいのですが
どうすればいいでしょうか?
よろしくお願いします

42:デフォルトの名無しさん
22/02/12 23:11:31.31 IAH9YCSPa.net
条件付き書式が一番いい気がする

43:デフォルトの名無しさん
22/02/12 23:18:33.99 FD8BwyjM0.net
>>40
条件付き書式でいいんじゃね
VBAいらんだろ。どっかエクセルの使い方のスレで聞け

44:デフォルトの名無しさん
22/02/13 00:20:49.39 hyUOgQwKa.net
>>20
言語の問題より可読性が問題だな。ワラワラ

45:デフォルトの名無しさん
22/02/13 00:34:59.07 TIGHqVMSd.net
>>40
スレチだけど上の人が言ってるように条件式書式ならこんな感じのを使えばいいかと
=AND(TODAY()-10<=RC,RC<TODAY())
これは日付の入っているセルに対して質問にあるような条件で色付けたりできるよ
※R1C1形式になってるので注意

46:デフォルトの名無しさん
22/02/13 07:35:55.02 P798zPao0.net
>>44
Excelの総合で質問もして教えて頂けました。
解説ありがとうございます。
勉強になりました。

47:デフォルトの名無しさん
22/02/14 12:57:56.87 wZ5OVHUFd.net
この画像みたいなExcelファイル(1枚目)をデータベース化する為に、情報を抽出して横並びに整理したい(2枚目)のですが、アドバイスいただきたいです。
行数や列数がそれぞれ異なり、罫線の枠内でも、変に結合や分割されており、関数のみでは対応しきれませんでした。
※元々がPDFでしか入力できないデータの為、それをExcel変換しているせいで構成が崩れています。
罫線の枠構成は崩れていない為、マクロで処理するとしたら、各セルの罫線を判定して、囲われた範囲の値を順番に取得していくしかないのかな?と思っています。
枠内の左上隅(左と上に罫線があるセル)から、右下隅(右と下に罫線があるセル)までの値を取得して連結、次の枠へ進む、という処理しか思いつかないのですが、他にいい案はあるでしょうか?
URLリンク(i.imgur.com)
URLリンク(i.imgur.com)

48:デフォルトの名無しさん
22/02/14 13:06:54.20 O4GcyUrK0.net
>>46
Power Queryでも、このセル結合だらけ(結合されてたりされてなかったり・・・)の
データクレンジングは厳しいかも知れない。
ステップが100超えるかも・・・

49:デフォルトの名無しさん
22/02/14 13:10:47.83 ecmIkoYm0.net
一度全ての結合解除するとかは?
同じ項目に相当する入力値の行き先が泣き別れたら終わるけども

50:デフォルトの名無しさん
22/02/14 13:31:47.44 33Tyeh9C0.net
>>46
ID以外に空欄がないのなら、データの区切り、たとえばB列の水平の罫線の位置だけ検出すればいい
あとはその範囲を左上から舐めて、空白セルを無視しながらデータを取り出すだけ
結合は全部解除した方がロジックは簡単になると思う
そんなに難しくない
テスト用のデータを用意するのが面倒だから、そのサンプルをエクセル形式かスプレッドシートにでも入れて公開してよ

51:デフォルトの名無しさん
22/02/14 13:53:01.79 XTh2f6qa0.net
>>46
すげぇな!ここまでのは見たことないぞ
行数が同じなら、
C6:C11を文字列で結合すれば良いかと思ったけど
行数も違うのか
セル内改行したり、セルをわけたりで行数がバラバラなのね
やるなら、
C6 11111-11
c7 11111-12
C8 11111-21
C9 11111-22
・・・
みたいにすれば、まぁなんとか行けるかなと思う
今のままじゃ無理だ

52:デフォルトの名無しさん
22/02/14 13:58:47.62 XTh2f6qa0.net
と思ったら罫線を基準にすればいいのか

53:デフォルトの名無しさん
22/02/14 14:07:53.31 deGbjwUIa.net
CSVで吐き出して
それを加工したほうが早くね?

54:デフォルトの名無しさん
22/02/14 14:16:38.09 XTh2f6qa0.net
csvにしたら大惨事だろう

55:デフォルトの名無しさん
22/02/14 14:28:40.98 wZ5OVHUFd.net
いくつも返信ありがとうございます。
サンプルは後程公開しようと思います。
セル結合解除したらこうなります。
罫線範囲の左上に値があればまだマシなのですが、途中だったり分割されてたりがネックです。また、空白のセルも多々存在します。
VBA初心者の為、合理的な処理かは分かりませんが、今はこの矢印の順でセルを移動しながら、罫線の判定と値の取得する流れで考えています。
URLリンク(i.imgur.com)

56:デフォルトの名無しさん
22/02/14 14:44:13.39 AWvjJcV30.net
URLリンク(atmarkit.itmedia.co.jp)
 ↑ ここでは一旦Word経由で取り込めと勧めているが、果たして
にしても、 > ※元々がPDFでしか入力できないデータ  とは?
PDFの原稿があって、その枠の中にテキスト貼り付ける方式なのか?

57:デフォルトの名無しさん
22/02/14 14:53:57.21 33Tyeh9C0.net
>>50
この画像の範囲にはセル内改行はないぞ
よく見ると背景と同じ色の白い罫線が隠れてる

58:デフォルトの名無しさん
22/02/14 14:55:08.92 33Tyeh9C0.net
>>55
最新のPDFには入力フォームを重ねる機能があるんよ

59:デフォルトの名無しさん
22/02/14 14:59:16.98 33Tyeh9C0.net
>>54
基本それでいいと思うよ
いちいち判定せずとも空白セルも含めてどんどん文字列を足してくだけで目的のデータが自動的に残る

60:デフォルトの名無しさん
22/02/14 15:02:51.71 XTh2f6qa0.net
>>56
J21セル

61:デフォルトの名無しさん
22/02/14 15:14:55.89 O4GcyUrK0.net
>>51
罫線を検知するVBAは、このあたり使うのかしら?
例えば「実線の下線縛り」だと
If Range("A5").Borders(xlEdgeBottom).LineStyle = xlContinuous Then
 MsgBox "下線あり"
 Else
MsgBox "下線なし"
 End If
セルの上下左右も調べることになる?
URLリンク(chaichan.lolipop.jp)

62:デフォルトの名無しさん
22/02/14 15:21:11.73 33Tyeh9C0.net
>>59
見落としてたごめん

63:デフォルトの名無しさん
22/02/14 15:47:34.87 nf+c+LFy0.net
PDFからExel変換がまともに出来てないから元のPDFからテキストデータ抜き出して処理した方が早い気がするなぁ

64:デフォルトの名無しさん
22/02/14 15:52:40.41 XTh2f6qa0.net
>>60
下だけでいい
ってかはよサンプルくれ。サンプルなしでコード書くのあんまり好きやないんや
とりあえず下線の判定部分だけ置いとくぞ
Function 下線あり(target)
If target.Borders(xlEdgeBottom).LineStyle <> xlLineStyleNone Then
下線あり = True
Else
下線あり = False
End If
End Function

65:デフォルトの名無しさん
22/02/14 16:25:13.19 O4GcyUrK0.net
>>63
>>>>60
>>下だけでいい
2個分入っている「例 参考3・4」と
1個分だけの「例 参考5」を
どう見分けるか、嫌らしいなぁ・・・
と思って。

66:デフォルトの名無しさん
22/02/14 16:50:56.63 wZ5OVHUFd.net
>>55
word経由だったり、何種類かの変換ソフトを試したけど出来はほぼ変わりませんでした。
PDFの経緯ですが、他社のWEB上でのサービスにて個人情報等を登録管理しており、選択して出力する際にはPDF形式でしか出力できず、今回の悩みになっています。

67:デフォルトの名無しさん
22/02/14 16:52:00.24 wZ5OVHUFd.net
サンプルです。
よろしくお願いします。
URLリンク(docs.google.com)
共有の仕方合ってるか不安ですが。。

68:デフォルトの名無しさん
22/02/14 17:08:51.74 xN/gSLrN0.net
>>65
そのサービスを提供している会社に相談しろよ
馬鹿なの?

69:デフォルトの名無しさん
22/02/14 17:56:38.45 qxU338Vtd.net
画像見た感じだとそうめんどくさい話ではないかね
住所欄と連絡先欄の住所と電話番号をどういうルールで分解するかがわかれば変換は余裕かと
ただこの手の内容までこのスレで答えるのはいいように使われている感があっていやだなぁw

70:デフォルトの名無しさん
22/02/14 18:16:24.84 XTh2f6qa0.net
住所の下に下線ない事に気づき、無事死亡

71:デフォルトの名無しさん
22/02/14 18:16:43.53 O4GcyUrK0.net
>>66
DL出来たよ。
Power Queryでどこまで出来るか
やってみる。

72:デフォルトの名無しさん
22/02/14 18:19:08.21 XTh2f6qa0.net
更にこれ氏名でセルわかれてるんかーい

73:デフォルトの名無しさん
22/02/14 18:55:37.73 wZ5OVHUFd.net
>>55
混乱させてすみません、PDFでしか「入手」できないデータの誤りでした。
サービス元からは、それ以外の形式での出力はできないとの回答の為、このExcelファイルをなんとか処理して使わざるを得ない状態です。

74:デフォルトの名無しさん
22/02/14 18:58:42.50 /RDvxF8W0.net
指定した日付から、その日付が1年間の第何週かを求めそれを引数にして、その週の月曜日と金曜日の日付を返す式を教えてください。
i = WeekNum(指定日)
date1 = 開始日(月曜日)
date2 = 終了日(金曜日)

75:デフォルトの名無しさん
22/02/14 19:33:13.83 qxU338Vtd.net
>>73
・週の初めは何曜日基準?日曜日?月曜日?別の曜日?
・それを引数のそれって何?開始日(月曜日)の関数にiは使ってないのでは?指定日ではだめなの?
・仮に日曜日基準とした場合、2022年1月1日(土)の月曜日は2021年12月26日?それとも別の日?

76:デフォルトの名無しさん
22/02/14 19:34:32.34 qxU338Vtd.net
>>73
そもそもVBAの回答が知りたいの?それとも関数使ってなの?関数ならスレチですよ

77:デフォルトの名無しさん
22/02/14 19:35:02.10 XTh2f6qa0.net
>>46
2時間半、思ったより早くできたけど、まぁキツイな
変数名も終わってる
URLリンク(jsfiddle.net)

78:デフォルトの名無しさん
22/02/14 19:36:56.50 XTh2f6qa0.net
別に関数でもいいんじゃないの?
俺もコードの中にworksheetfunction使ってるし、気にしたらキリないわ

79:デフォルトの名無しさん
22/02/14 19:41:40.69 XTh2f6qa0.net
>>76に追記
「シート1」というシートに元データ
「転記先」というシートを作っておいて下さい

80:デフォルトの名無しさん
22/02/14 19:45:27.38 O4GcyUrK0.net
>>66
ひとまず
元ファイルのセル結合を解除しないまま、
別ファイルからPower Queryでsheetをそのまま読込んで、
不要な行/列、空白、改行コードを削除したり
列を合体したりして、ある程度整理してみた。
URLリンク(i.imgur.com)
URLリンク(i.imgur.com)
やっぱ、どの行までが1個体のデータなのか判別がつかないので、
ここから先は難しい。
それが特定できればsheet上のテーブルの右側に列足して
M言語でなく、使い慣れたExcelのIF関数や文字列関数使って
拾っていくことも出来そうなんだけど・・・
先にVBAで罫線判別して各行にフラグでも立てることが必要っぽい。
>>63 氏に期待

81:デフォルトの名無しさん
22/02/14 19:46:56.80 O4GcyUrK0.net
あ、
>>63 氏、出来たのね。

82:デフォルトの名無しさん
22/02/14 19:47:44.47 TbpPq1WHM.net
pdfからの変換で毎回セル位置が変わるのか?
変わらないなら一回参照シート作るだけじゃね?

83:デフォルトの名無しさん
22/02/14 19:53:08.06 XTh2f6qa0.net
>>73
関数の方が早い
URLリンク(i.imgur.com)
vbaに落とし込むなら、worksheetfunctionを使ってくれ

84:デフォルトの名無しさん
22/02/14 19:54:22.25 /oecZUEba.net
>>73
DatePart("ww", Date, vbMonday, vbFirstFullWeek)
あとはその日が何曜日が調べて
プラスマイナスすれば月金も出るよ

85:デフォルトの名無しさん
22/02/15 02:26:45.53 yR4VR0Kt0.net
Excel板の住人が発狂して荒らしてくるから関数はダメかも

86:デフォルトの名無しさん
22/02/15 03:38:15.06 6BbZ47hN0.net
Fomuraでvbaでセルに
関数放り込んでやれば

87:デフォルトの名無しさん
22/02/15 08:44:43.33 H1nNFxJWd.net
>>79
powerqueryである程度処理は可能なんですね。ありがとうございます。
実際は1000件以上のデータで項目も更に多く、行も列もバラバラなので手作業はやはり限界がありそうです。

88:デフォルトの名無しさん
22/02/15 08:49:44.20 H1nNFxJWd.net
>>76
本当にありがとうございます。
サンプルの方では問題なく処理されるのを確認できました。
自身が書いたらもっと長々しくぐちゃぐちゃになっていたと思うので、すっきりまとまっていて素晴らしいと思います。
For Each 個人列 In Array(3, 4, 9, 10, 11, 15)
ここは列は固定の指定になっていたのですが、ファイルによっては列もバラバラなので、最初に文字列検索で列を調べてから処理に入るように変えていきたいと思います。
皆さん本当にありがとうございました。

89:デフォルトの名無しさん
22/02/15 13:36:45.93 mFkQACiCd.net
レセコンのデータだろ

90:デフォルトの名無しさん
22/02/15 16:04:21.44 aiSHqaBU0.net
A~K列にデータを入力しているシートで、C列にデータがある場合のみその行をコピーする、という動作をさせるには
どう記述すればいいでしょうか?

91:デフォルトの名無しさん
22/02/15 17:39:01.90 6Pf72uqdM.net
if文でC列に入力があるかを判定すれば良い
コピーする行はC列に入力がある全ての行か?それとも一番最初のものだけか?またはカーソルがある位置だけを対象にするのか?
もう少し細かく仕様を書いてくれた方が導きやすいぞ

92:デフォルトの名無しさん
22/02/15 17:39:49.61 zxh7HcNj0.net
>>89
If Range("C1").Text <> "" Then Range("A1:K1").Copy

93:デフォルトの名無しさん
22/02/15 18:55:31.55 MJaSxl0D0.net
>>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

94:デフォルトの名無しさん
22/02/16 09:01:55.23 r3Bj6a+b0.net
>>90
確かにそうですね 別ファイルにC列にデータがある行のみをエクスポートするようなものを作ろうとしていたので
C列にデータがあるかの判断→あればコピー→エクスポート先との差分のみを貼り付け
としようとしています
差分の貼り付けは参考になりそうなコードがあったのでそれと組み合わせて考えようと思っていました
>>91
ありがとうございます、シンプルで応用が利きそうで助かります
>>92
その発想はありませんでした、ありがとうございます

95:デフォルトの名無しさん
22/02/16 21:42:26.46 jzL/oN3O0.net
選択した範囲のセルから、「セルの色」と「文字」で絞った数を調べたいのですが、どのように書けば宜しいでしょうか?
(色に関しては、指定したセルの色を参照したいです。)
例:A1~D10の中で、E1と同じ色で、「テスト」と書かれているセルの数
みたいなことです。
出来ればグーグルのスプレッドシートでも使いたいです…

96:デフォルトの名無しさん
22/02/16 22:02:32.25 tqdkY3B80.net
>>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

97:デフォルトの名無しさん
22/02/16 22:17:26.65 VM6eHjoj0.net
>>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
こんな感じか

98:デフォルトの名無しさん
22/02/16 22:19:34.63 VM6eHjoj0.net
ああ、ほぼ被った上にDebug消し忘れてる

99:デフォルトの名無しさん
22/02/17 15:22:29.06 BBg74W1Zd.net
fileSystemObjetを使うときに下のコードのようにインスタンスを格納する変数を省略できるのはなぜですか?
ひょっとしてwithでくくるときに一時的に作られる変数にでもいれているのでしょうか?
with New fileSystemObject
ステートメント
End With

100:デフォルトの名無しさん
22/02/17 15:49:10.52 Lj9EVaDX0.net
>>98
> ひょっとしてwithでくくるときに一時的に作られる変数にでもいれているのでしょうか?
まあそう言うこと
RegExp とかでも使える

101:デフォルトの名無しさん
22/02/17 16:14:35.03 8LWMZH0T0.net
>>98
どんなオブジェクトもwithの一時変数に入れられるよ
ほかによく使われるのはブラウザコントロールとか

102:デフォルトの名無しさん
22/02/17 16:21:30.38 lbVsnXnA0.net
このwithが参照してるオブジェクトって確認する方法ありますか


103:? Sub foo() With Cells(1, 1) Debug.Print .Value End With End Sub とりあえずウォッチ式に「.value」入れてみてもエラーで見れなかった with と入れてもエラー どこに格納されているんだろう



104:デフォルトの名無しさん
22/02/17 17:02:27.81 8LWMZH0T0.net
>>101
VBだとGetTypeで取得できるんだけど、VBAにはないね

105:デフォルトの名無しさん
22/02/17 19:16:24.68 uTvXTdo20.net
>>101
内部的に一時変数に保存されているが、ユーザからは直接参照できない
ウォッチ式はどうもWithのスコープ外の扱いっぽいな
>>102
暗黙的に参照されているものが自分自身を返すようなメンバを持ってないかぎり
Withで暗黙的に参照してる変数そのものを確認する方法はなかったはず
おそらくVBにもなかったはずだけど
個人的には参照できないWithはつかわないのが作法じゃないかと
俺はWith New否定派だ

106:デフォルトの名無しさん
22/02/17 20:01:56.20 lbVsnXnA0.net
>>103
ありがとう
with、どうにもモヤッとした感じが取れないな
Meかparentでメモリ追っかけられそうな気もしたけど、うーん難しそう

107:デフォルトの名無しさん
22/02/17 20:37:40.67 oZh0IyxXd.net
配列に値を保存しておいて、別シートの特定セル範囲に値を入れたいんだけど、
Worksheets("シート名").Range("A1:A10").Value =配列
だとエラーが出ます。
仕方なく、シート移動してから
Range("A1:A10").Value =配列
で値を入れてから元シートに戻る処理をしてるんですが、他にいい方法ありませんか?

108:デフォルトの名無しさん
22/02/17 20:39:35.05 rEGDS72/0.net
何てエラーが出る?

109:デフォルトの名無しさん
22/02/17 20:43:06.54 od7uaDdG0.net
なんのエラーか分からんから手っ取り早いのは
先にWorksheets("シート名").activateしておけば

110:デフォルトの名無しさん
22/02/17 20:52:49.10 oZh0IyxXd.net
曖昧な情報ですみませんでした。
WorkSheets(”シート名”).Range(cell(変数,1),cell(変数,20)).Value =配列
だと
実行時エラー'1004':
アプリケーション定義またはオブジェクト定義のエラーです。
となります。
Worksheets("シート名").activate
Range以下同じ
だと正常に動作します。
数百のデータ取得転記なので、可能であればシート移動は減らしたいと考えています。

111:デフォルトの名無しさん
22/02/17 20:56:15.04 4vzfA+8GM.net
Rangeの後のCellsにもシート指定が必要

112:デフォルトの名無しさん
22/02/17 21:03:41.49 lNAQUSmM0.net
それ案外忘れやすいよな

113:デフォルトの名無しさん
22/02/17 21:06:37.67 Lj9EVaDX0.net
>>108
>>109 の言う通りで
With WorkSheets(”シート名”)
.Range(.Cells(変数, 1), .Cells(変数, 20)).Value =配列
End With
が定番

114:デフォルトの名無しさん
22/02/17 21:19:48.40 lbVsnXnA0.net
>>111
setの方が好きだわ
set ws = WorkSheets(”シート名”)
ws.Range(ws.Cells(変数, 1), ws.Cells(変数, 20)).Value =配列

115:デフォルトの名無しさん
22/02/17 21:56:36.84 bEhlAQ9Hd.net
>>109-112
正しくそれが原因でした。
ありがとうございました。
先日>>46で質問させて頂いた者ですが、教えていただいたものをベースにかなり形になってきました。
数値を1個ずつ転記するのと、配列に入れて転記するのって処理時間にかなり差があるんですね。

116:デフォルトの名無しさん
22/02/17 22:14:24.38 Lj9EVaDX0.net
>>113
シートへの読み書きはかなり遅いからデータが大量にある時は配列に一気に読出して配列上で処理して一気にシートに書出すのは定番の高速化手法

117:デフォルトの名無しさん
22/02/17 22:24:21.56 bEhlAQ9Hd.net
1人30項目×数百人だったので、まずは1人分を配列に入れて転記するようにしただけで数倍早くなりました。
このようなケースだと、さらに30×人数全てまとめて配列に入れて転記するものなんでしょうか?

118:デフォルトの名無しさん
22/02/17 22:29:04.03 Lj9EVaDX0.net
ケースバイケースだけど30列×数百行程度なら全体を一気に読み書きしてもいいと思う

119:デフォルトの名無しさん
22/02/17 23:14:43.35 lbVsnXnA0.net
>>115
数倍といっても、1秒が0.1秒になっても、実質何も変わってないのと同じ
そのためになれない配列を使ってコードを書く時間が5分長くなるようなら、そんな最適化はせんでいいってことになる
30分が3分になるなら、やったほうが良いだろう
要は総合的に見て、全体的な時間が減るなら最適化したほうが良い
死ぬほど暇なら、暇なときにどんどんやっておけば、忙しくなったときに余裕が出る

120:デフォルトの名無しさん
22/02/18 00:01:31.11 kIxJDUOP0.net
1秒と0.1秒の体感時間の差は意外とでかいぞ
短くできるならしたほうがいいわ

121:デフォルトの名無しさん
22/02/18 03:42:39.82 E/I/ujWM0.net
>>115
プログラムを大幅に書き換えなくても、再描画と再計算とイベントを止めるだけで速くなることもあるんでいっぺん試してみ

122:デフォルトの名無しさん
22/02/18 06:33:19.64 uvosISh90.net
>>104
Withはそういうもんだと割り切るしかない。
VB系以外で見たことないからVB系特有なもんだと思う。



123:、旧VB6のスレでWith NewってやるとC#のUsingみたいにEnd Withで勝手にObjectの開放してくれるので、 そういう使い方をするコードが書かれたとき賛否両論だったのを覚えてる。 Withも、もしVB系の言語が将来生き続けることになっていたら負の遺産みたいに言われていたかも知れないけど、 Visual Studio CoreでマイクロソフトもVB.Netはもう発展させないことを明言しているから そっちの開発している人は適当なところで別言語やるようになるだろうね。



124:デフォルトの名無しさん
22/02/18 08:19:03.35 v2iRKHri0.net
>>120
>そういう使い方をするコードが書かれたとき賛否両論
そうなるだろうね
割り切って使う人には便利かもしれないけど、捉えきれない部分があるのはかなり気持ち悪い
ありがとう、スッキリした

125:デフォルトの名無しさん
22/02/18 09:18:41.84 k4bZDTy80.net
>>120
> VB系以外で見たことないからVB系特有なもんだと思う。
Pascal からの輸入だろ

126:デフォルトの名無しさん
22/02/18 15:45:36.50 Sc8nOBZDd.net
>>100
すっきりしました。ありがとうございました

127:デフォルトの名無しさん
22/02/18 16:04:07.81 +5TWcNgJM.net
C++系でクラスメンバーに _ 付けたりするよりは . 強制のVB のがわかりやすい

128:デフォルトの名無しさん
22/02/18 16:12:26.42 mnS8isni0.net
VBとVBAを混同してしまう

129:デフォルトの名無しさん
22/02/18 17:12:34.16 9dJRbxWs0.net
VB更新止めるならビジュべー7作ったらVBAからの乗り換えで大人気になるかも
本職の人は発狂しそうだけど

130:デフォルトの名無しさん
22/02/18 17:40:13.70 v2iRKHri0.net
ならんよ

131:デフォルトの名無しさん
22/02/18 18:34:46.08 9dJRbxWs0.net
>>127
4文字で撃破 笑

132:デフォルトの名無しさん
22/02/18 21:31:15.96 /GJYcSex0.net
イベントでメッセージボックス起動するだけじゃ
進む戻るの履歴は消えないんだな
良かった良かった

133:デフォルトの名無しさん
22/02/19 00:17:14.09 mx39evoXM.net
RelaxTools AddinからTortoiseSVNに繋げる方法が
バージョン管理の手法としての最善策ですか?

134:デフォルトの名無しさん
22/02/19 01:15:29.08 1GYJVttN0.net
そういやvbaでバージョン管理っていい方法あるのかな
ドロップボックスに丸投げしてるからよく知らないや

135:デフォルトの名無しさん
22/02/19 02:51:28.34 evvGZLor0.net
昔はOFFICE DEVELOPERとかいうのがあって、たしかVSSだったと思うがバージョン管理できた
ACCESSとか2007ぐらいまではTFSにつなぐアドインもあった
この辺の仕組みって、基本的にはソース管理プロパイダで差し替えできるようになってたはずなんだがなぁ
あんまり情報もないんだよな

136:デフォルトの名無しさん
22/02/19 05:57:33.40 GK0tMJPG0.net
Microsoft製バージョン管理システム
VSS(ソース管理はVSS)

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

AzureDevOps(ソース管理はGitまたはTFS)

137:デフォルトの名無しさん
22/02/19 07:12:39.37 sDFYuIo+M.net
TFS(TeamFoundationServer)は製品名
ソース管理はTFVC(TeamFoundationVersionControl)

138:デフォルトの名無しさん
22/02/19 07:37:52.31 GK0tMJPG0.net
>>134
間違った理解で適当なこと書き込んですまなかった
確かにTFVCと呼ぶ方が正しいな
URLリンク(i.imgur.com)
URLリンク(docs.microsoft.com)

139:デフォルトの名無しさん
22/02/19 09:03:14.67 5qKPM2PV0.net
SVNで間に合ってる

140:デフォルトの名無しさん
22/02/19 09:23:14.09 VKF1jqEnM.net
時々のマクロファイル保存で間に合ってる

141:デフォルトの名無しさん
22/02/19 10:11:08.00 1GYJVttN0.net
vbaでそんな巨大プロジェクト作らないから、ドロップボックスでいいかな・・・

142:デフォルトの名無しさん
22/02/19 10:47:12.21 1AFURcFW0.net
マイクロソフト製品なんだから
One Driveでいいだろ

143:デフォルトの名無しさん
22/02/19 11:07:16.61 gdvHyp150.net
ちゃんとやるのは最初だけ

144:デフォルトの名無しさん
22/02/19 11:11:58.36 1GYJVttN0.net
One Driveはバグが多すぎるから絶対に無理w

145:デフォルトの名無しさん
22/02/19 11:33:30.74 7kiLsofr0.net
バージョン管理なんてエクセルファイル名にver1.0とか含めておけばいいんじゃないの?

146:デフォルトの名無しさん
22/02/19 11:37:15.90 1GYJVttN0.net
売上報告_最新_最終版コピー(2)_old決定版.xlsm

147:デフォルトの名無しさん
22/02/19 11:54:53.81 x/upE6G90.net
>>141
どんなバグがあるの?

148:デフォルトの名無しさん
22/02/19 12:05:18.04 1GYJVttN0.net
>>144
復元できないという致命傷
onedrive バグ などで検索すると出てくるよ
先週ぐらいもあった

149:デフォルトの名無しさん
22/02/19 14:20:31.32 4xnJtOkW0.net
回答を待たずに見切り発車でTortoiseSVNを導入しようとして
サーバーエラーの解決ができずに数時間のたうち回っている
バージョン管理なんておいらには高等技術過ぎたかもしれねぇ…

150:デフォルトの名無しさん
22/02/19 14:35:17.05 x/upE6G90.net
>>145
同期関連か、まあそれを信用するのは時期尚早やな

151:デフォルトの名無しさん
22/02/19 15:26:08.63 1GYJVttN0.net
>>146
TortoiseSVNは割とガチ環境。導入のハードル高いからマジでやめたほうがいいぞ
ドロップボックスか、googleドライブに同期させておくぐらいがちょうど良い
バージョン管理って大層なものを導入しなくても、
コードの中に「xxまで実装した。残りyy」みたいに書いておけば
それなりに使いやすいバックアップになる
どうせVBAなんてブランチ切るとかそんなことしないから一本道でヘーキヘーキ

152:デフォルトの名無しさん
22/02/19 15:26:52.07 1GYJVttN0.net
なお俺もTortoiseSVN挑戦して挫折した一人
かなり癖あった気がする

153:デフォルトの名無しさん
22/02/19 15:41:34.88 evvGZLor0.net
まあいまどきならgitが楽でいいんじゃね
サーバ側でなにもしないならファイル共有さえすればバージョン管理サーバとして使える
VBAはエクスポートしてバージョン管理だな。そこまでする必要があるものは少ないけど
>>142
エクセル丸ごとで管理するだけならな
ソースの修正箇所の履歴とか差分とかとるときにバージョン管理が必要なんだよ

154:デフォルトの名無しさん
22/02/19 16:13:02.46 x/upE6G90.net
>>146
自分一人で使うならサーバーなんて要らんよ
リポジトリをローカルファイルシステムに作ればいいだけ
外部参照とかの一部の機能が使えなくなるけど
具体的な操作は流石にスレチだから聞きたいならこちらで
バージョン管理システムについて語るスレ10
スレリンク(tech板)

155:デフォルトの名無しさん
22/02/19 16:22:07.18 5qKPM2PV0.net
TortoiseSVNはクライアントだよぉ
サーバーわかんないならgit hub使えば良いんでない?

156:デフォルトの名無しさん
22/02/19 16:40:13.61 71RYd9t40.net
gitとsvnはなんか概念違うから最初にsvnから入るとgitが分かりにくくなるって聞くな

157:デフォルトの名無しさん
22/02/19 16:57:02.53 V3h8uUoVM.net
概念というかポリシーが違うから馴染めないというのはあると思う
Linux みたいな巨大なアプリでなきゃ SVN の速度でもたいして困らんし

158:デフォルトの名無しさん
22/02/19 17:18:28.82 PJU9YEhh0.net
Excel板覗いてきたけど、関数を入力するときに=+って入力している人がいた。それはマニアな人だよね?

159:デフォルトの名無しさん
22/02/19 17:37:22.02 1GYJVttN0.net
>>155
それ俺なんだけど、
・「=」の売り間違えが嫌い
・「+」は絶対に打ち間違えない
ので、
数式は
+A1


160:-B1 と入力してる excelの仕様上、+で始まっている数式には更に=が追加される模様



161:デフォルトの名無しさん
22/02/19 17:56:27.92 sU8KQZKj0.net
世の中に絶対など無い・ある どっち?

162:デフォルトの名無しさん
22/02/19 17:59:47.25 8XK4gjnm0.net
ない

163:デフォルトの名無しさん
22/02/19 18:11:04.25 PJU9YEhh0.net
たまに+で入力している人見るから。ちょっと思い出して

164:ハノン
22/02/19 18:48:24.57 wlwakG6U0.net
>>148
私はドロップボックスに RCS のレポジトリを置いていたのですがユーザー認証が厳しくなったときにレポジトリ全部がおじゃんになってしまいました、これは痛い、痛すぎる…
もう懲りてバージョン管理システムを使わなくなってしまった…
そろそろ git をはじめようかと思案中です

165:デフォルトの名無しさん
22/02/19 18:58:23.53 lALNUlVh0.net
絶対など絶対にない!

166:デフォルトの名無しさん
22/02/19 21:45:46.48 gdvHyp150.net
絶体絶命でも死なない

167:デフォルトの名無しさん
22/02/21 01:45:01.56 OrVm1a1F0.net
絶対領域ならある

168:デフォルトの名無しさん
22/02/21 02:37:10.15 i+Nk/hZw0.net
絶対可憐

169:デフォルトの名無しさん
22/02/21 02:52:14.84 OIlsWcuQ0.net
絶対音感の自分が通りますよ

170:デフォルトの名無しさん
22/02/21 06:15:17.92 9b7axwXE0.net
絶対運命黙示録

171:デフォルトの名無しさん
22/02/21 08:43:58.11 uSPFSI8K0.net
絶体絶命

172:デフォルトの名無しさん
22/02/21 09:01:35.23 n81sYxUz0.net
絶対なんて言葉、VBA上では絶対値くらいちゃうの?
複数Shape並べる時とかの座標を絶対値にするかLoop中の計算追い寸にするかいつも迷う

173:デフォルトの名無しさん
22/02/21 10:12:19.05 i+Nk/hZw0.net
絶対参照⇔相対参照ってのもあるぞ
現実に「絶対」はないとされてるけど、コンピューターの世界では割とよく出てくる言葉の一つ

174:デフォルトの名無しさん
22/02/21 13:18:00.34 zel+kn1IM.net
>>169
その絶対は意味合いが違うと思うぞ

175:デフォルトの名無しさん
22/02/21 13:31:12.92 2STuN7VvM.net
絶対零度を超えると時間が巻き戻るからな

176:デフォルトの名無しさん
22/02/21 13:49:17.52 V2QoZaN/M.net
絶対値、絶対音感、絶対領域は形容詞
絶対参照、絶体絶命は形容動詞
区別する方法は、後半が動詞になるかどうか、つまり「参照する」「絶命する」はあるけど「音感する」「領域する」とは言わない

177:デフォルトの名無しさん
22/02/21 14:04:18.08 4epPW0O6a.net
>>169
言葉や概念としての「絶対」があるかといえばある

178:デフォルトの名無しさん
22/02/21 14:40:29.16 zel+kn1IM.net
>>172
なぜ有能がここに迷い込んできたのか

179:デフォルトの名無しさん
22/02/21 14:41:00.68 IVAAebPQ0.net
>>172
すごい(語彙)

180:デフォルトの名無しさん
22/02/21 16:13:18.73 kWGdoALl0.net
全部名詞やん

181:デフォルトの名無しさん
22/02/21 20:31:11.80 8rVxF2Gw0.net
絶対に負けられない戦いに負けたらどうなる?

182:デフォルトの名無しさん
22/02/22 00:40:55.58 OzXpMxHE0.net
それが今の日本です

183:デフォルトの名無しさん
22/02/22 16:24:40.19 0TsP51M+0.net
Excelコンテストで勝つ!

184:デフォルトの名無しさん
22/02/22 16:51:35.21 9f6q+kU90.net
なんぞ? と思ったら一昔以上も前のぢゃねーか!
URLリンク(xtech.nikkei.com)
こういうことやり続けてきたから間違ったExcelerが繁殖しちまったんぢゃねーのか?
なあにが 営業成績表彰システム ぱ か ぱ か だっつーの  遊んでんぢゃねぇよ!

185:デフォルトの名無しさん
22/02/24 14:20:26.28 PuX8FwU40.net
同じpcに開かれている別のエクセルのプロシージャを実行することてできる?

186:デフォルトの名無しさん
22/02/24 14:23:40.68 pVKiKajRM.net
同じプロセスなら普通にできるだろ

187:デフォルトの名無しさん
22/02/24 18:15:16.40 iej9QTZYa.net
普通のExcelの質問していいですか?

188:デフォルトの名無しさん
22/02/24 18:16:27.79 ozL7dLyM0.net
どうぞ

189:デフォルトの名無しさん
22/02/24 18:33:03.41 iej9QTZYa.net
ありがとうございます!
日付だけを縦にずっと入力していくのですが、じょうごマークで絞り込みを開くと
「2022年」「1月 2月…」とあり、「1月」の「+」マークを開くと更に日付が「1日 2日 3日…」と
入力したものがでてきますよね。その「+」マークを開かなくても2022年と同じ左詰めで「1月3日」というのがあって
1/3だけ半角で何度入れ直しても「2022年」「1月」の中に入らないんです。
しかも「1月」の「+」マークを開いても「3日」があり、絞り込むと左詰めの「1月3日」と同じ項目が出てきます。
意味が分からなかったらすみません。分かる方いらっしゃったら教えてください。

190:デフォルトの名無しさん
22/02/24 18:48:46.05 ozL7dLyM0.net
>>185
文字列になっている
・他の日付セルをコピーして、その左詰め1/3に貼り付け
・もう一度2022/1/3と打ち直す
それでもう一度試すとどうなるか

191:デフォルトの名無しさん
22/02/24 20:31:45.10 exGzm3wL0.net
>>185
スレタイ読め
消えろ

192:デフォルトの名無しさん
22/02/24 20:51:03.24 N8+11+jZ0.net
うーわ! 余裕無えー よっぽどストレス溜まってんだなあ 追い詰められてんだろうなあ、社内で

193:デフォルトの名無しさん
22/02/24 21:02:21.44 K0Kp1JdiM.net
>>186
おおおー!文字列になってるんですね、なるほど!明日会社でやってみます!
ご親切に教えていただきありがとうございました。
このスレの方すみませんでした。ありがとうございましたm(_ _)m

194:デフォルトの名無しさん
22/02/24 21:22:25.12 OIkOwNi30.net
>>187
おまえなんか話題振れよ

195:デフォルトの名無しさん
22/02/24 22:13:31.53 Nlim82gmM.net
さっき電車の中で向かいに若い女性の二人組が座っててさあ

196:デフォルトの名無しさん
22/02/24 23:52:39.32 CvXfU24U0.net
>>188
リアルすぎて草

197:デフォルトの名無しさん
22/02/25 03:22:55.08 hDgiDFze0.net
それで2人の会話を盗み聞きしたらさー
「職場にExcelマニアいるけどキッショいよねーwww」って言っていたよ~

198:デフォルトの名無しさん
22/02/25 14:17:15.60 QcxlogpXM.net
そして、Excelマニアが退職したあと、Excelが壊れたとマニアに鬼電するまでがテンプレ

199:デフォルトの名無しさん
22/02/25 17:06:35.52 vXWN6Ngg0.net
Excelマニアってなんぞ

200:デフォルトの名無しさん
22/02/25 21:30:18.25 Wier9kYf0.net
関数式でif文書くだけでExcel詳しい人扱いされる国

201:デフォルトの名無しさん
22/02/25 22:44:14.64 DoxyywZF0.net
シートに写真をおいて,そこにマクロを登録するのですが,
クリックしている間は処理を継続させるようにするにはどうしたら良いでしょうか?

202:デフォルトの名無しさん
22/02/25 22:51:14.84 a/ksSb5+0.net
アルミ箔とリード線使うといいんじゃないか?

203:デフォルトの名無しさん
22/02/25 23:08:55.89 sygyzO5g0.net
イベント時で MouseOver とかか クリックし続けって無かったような MouseMove だっけ なんかその辺

204:デフォルトの名無しさん
22/02/25 23:33:04.48 O9IDWaUh0.net
Excelはマニアで済むけれど
Rubyなんて宗教だもんな

205:デフォルトの名無しさん
22/02/26 00:20:17.83 SY5M7+S/a.net
単なるあだ名だろw

206:デフォルトの名無しさん
22/02/26 03:20:22.62 T7kJgkW90.net
お前はカルメンか

207:デフォルトの名無しさん
22/02/26 07:13:12.65 S41FQOKr0.net
>>200
rubyが宗教って言われるのはrubyの製作者が熱心なクリスチャンだからだよ
まさかガチの狂信者が出てくるとは思わなかったが・・・w

208:デフォルトの名無しさん
22/02/26 10:24:59.15 jtqt4mXJ0.net
>>199
ありがとうございます!

209:デフォルトの名無しさん
22/02/26 18:17:50.12 duMrqy+m0.net
Excelマニアとデータ分析マニアは違うみたいね

210:デフォルトの名無しさん
22/02/26 18:30:22.44 ZAxvZ+Mc0.net
>>205
「分析」が「統計」だとすると、
最終的に中間処理やアウトプットはExcelでなくてRなんかに行っちゃうかも。
Excelは統計関係の関数がアレだし。

211:デフォルトの名無しさん
22/02/26 19:53:05.77 duMrqy+m0.net
それでも昔からみんなExcelで無理してきた感

212:デフォルトの名無しさん
22/02/26 20:05:05.05 JqjjL3aFa.net
そこでPython

213:デフォルトの名無しさん
22/02/26 20:10:28.10 bGmpH7iw0.net
言語ならRやPython
パッケージならSPSSやSAS

214:デフォルトの名無しさん
22/02/26 20:19:26.32 S41FQOKr0.net
今思えば256列の60000行でよくやってこれたなと思う

215:デフォルトの名無しさん
22/02/26 20:43:17.30 joT9B4PU0.net
今でも256列や60,000行を超える処理ならDBMSにするわ

216:デフォルトの名無しさん
22/02/26 21:51:16.00 ZAxvZ+Mc0.net
ワークシートに読込ませず、
Power Queryの「接続」(他所からクエリー)だけにしておくと
行数最大:1,048,576行
列数最大:16,384列
まで扱えるみたいだけど、なんか別の入れ物は必要・・・
Accessを入れ物にしようとすると
テーブルはフィールド数最大255、
行数はファイル全体で2GBまでということか。

217:デフォルトの名無しさん
22/02/26 22:05:30.45 8Bo34rLG0.net
Pythonは途中から
数学で出てくる数式が分からないとキツくなるからちょっと保留してRust

218:デフォルトの名無しさん
22/02/26 22:10:39.56 duMrqy+m0.net
理系向きなのね?

219:デフォルトの名無しさん
22/02/26 22:16:53.94 ZAxvZ+Mc0.net
営業でも重回帰分析だの相関係数だのやってるところもあるから・・・
統計に使う数学は
もはや文系/理系に関係ない時代の模様

220:デフォルトの名無しさん
22/02/26 22:23:53.97 XZXEjFci0.net
ID:ZAxvZ+Mc0
また知ったか馬鹿か

221:デフォルトの名無しさん
22/02/26 22:31:17.36 e5W/1zqv0.net
平均とグラフが作れればうちの所は余裕だ…

222:デフォルトの名無しさん
22/02/26 22:35:46.73 ZAxvZ+Mc0.net
>>216
知ったか?
そうかね?
デカいデータを四則演算だけで済ませられるのは
財務会計くらいやん。

223:デフォルトの名無しさん
22/02/26 23:12:20.49 S41FQOKr0.net
ダントツで扱い易いのは偏差値かな
相対的な指標としては良く使う

224:デフォルトの名無しさん
22/02/26 23:12:53.14 S41FQOKr0.net
って営業は作らんやろ
さすがにそこは営業事務が作ってあげると思う

225:デフォルトの名無しさん
22/02/26 23:51:35.28 XZXEjFci0.net
>>218
言い訳すればするほど馬鹿さらけ出し

226:デフォルトの名無しさん
22/02/27 00:09:08.97 XQfZTF0E0.net
うちの営業はExcelの使い方すら知らん
Excelなんて使わないよなー、Wordの方が使うわって会話聞いて戦慄した

227:デフォルトの名無しさん
22/02/27 03:40:18.89 vE3gjDOr0.net
Executeexcel4macroでwindowsapiを使う場合、
戻りがオブジェクトだったらどうするの?

228:デフォルトの名無しさん
22/02/27 03:54:20.37 eD286Vb90.net
祈る

229:デフォルトの名無しさん
22/02/27 06:03:46.97 So6tXBwD0.net
>>223
どうするもこうするも、setして使うしかないじゃろ
以下だってsheets関数に引数1入れて、sheetオブジェクトが返ってきてるわけだし、同じです
Set ws = Sheets(1)

230:デフォルトの名無しさん
22/02/27 06:07:27.75 a0+qdDh70.net
>>223
おまえが作ったコードは見たくないな

231:デフォルトの名無しさん
22/02/27 06:10:51.70 So6tXBwD0.net
>>226
まぁまぁ・・・
setは最初はとっつきにくいので・・・

232:デフォルトの名無しさん
22/02/27 07:03:43.76 vE3gjDOr0.net
そうじゃなくて2JNとか指定するやつ。
オブジェクトが無くて絶望的なんだけど。

233:デフォルトの名無しさん
22/02/27 07:22:28.14 So6tXBwD0.net
>>228
あぁHWNDとかの奴か。ごめん、これは昔諦めた。他の人お願い。
やりたいことを先に書けば、それっぽいコード書いてくれる人がでてくるかも

234:デフォルトの名無しさん
22/02/27 11:02:51.91 F9ScTckVM.net
すみません。 半日つぶしてもできない。ダメ男です
なんとか協力してもらえませんか?
単純に「特定文字」のある行を削除したい(その行をその下の行の二行削除したい)
'まず、獲得ポイントを削除
Dim row_po As Long
row_po = Range("A14:D150").Find("[ 獲得ポイント ]").Row
Range(Rows(row_po), Rows(row_po + 1)).Delete
この書き方でとりあえず消えるのですが、[ 獲得ポイント ]が無かった時にエラーになり止まってしまいます。
で、スルーしてほしいのですが、なにをやってもスルーしてもらえません。
なにもしないことがこんなに難しいとは思いませんでした。
ほっといて欲しいだけなのに
どうするとアホでもわかりますかね?

235:デフォルトの名無しさん
22/02/27 11:09:42.41 amhd0I0YM.net
On Error Resume Nextを頭に入れるだけ

236:デフォルトの名無しさん
22/02/27 11:27:49.32 So6tXBwD0.net
>>230
Sub foo()
'先に見つけておく
Set p = Range("A14:D150").Find("獲得ポイント")
If Not (p Is Nothing) Then
'見つかったときの処理
row_po = p.Row
Rows(row_po & ":" & row_po + 1).Delete Shift:=xlUp
Else
'ここに見つからんかったときの処理
MsgBox "見つからんかった"
End If
End Sub
>231
それやると今度はrow_po でエラーが起きる可能性絶大

237:デフォルトの名無しさん
22/02/27 11:30:41.33 F9ScTckVM.net
>>231
おおお神よ
なぜあなたは神なのか
私は知恵熱っぽくまでなったのに
ちなみに検索するとエラーが全部キャンセルされるみたいなんですが、一応範囲を決めるとして
'まず、獲得ポイントを削除
On Error Resume Next
Dim row_po As Long
row_po = Range("A14:D150").Find("[ 獲得ポイント ]").Row
Range(Rows(row_po), Rows(row_po + 1)).Delete
On Error GoTo 0
で大丈夫な感じですか
動作はしました。(他の命令のエラーはちゃんと出るかな?と)

238:デフォルトの名無しさん
22/02/27 11:31:51.84 F9ScTckVM.net
>>232
あれ? まじですか
ちょっとわからない
ちなみにMsgBox を出したくないんです。
そのままスルーしてほしいのです

239:デフォルトの名無しさん
22/02/27 11:40:19.04 So6tXBwD0.net
>>233
onerrorはなるだけ使わない方が良いと思う。俺は使わずに書いてるよ
>>233でもいいけど、なるだけ少ない方が後々の変更が楽になる
Sub foo()
'先に見つけておく
Set p = Range("A14:D150").Find("獲得ポイント")
If Not (p Is Nothing) Then
'見つかったときの処理
row_po = p.Row
Rows(row_po & ":" & row_po + 1).Delete Shift:=xlUp
End If
End Sub

240:デフォルトの名無しさん
22/02/27 11:42:39.74 amhd0I0YM.net
>>234
動いたんならまず一旦良しとしていいと思う
良いやり方が他にもあるから今後更に知識が付いたその時に改良していけば良いさ

241:デフォルトの名無しさん
22/02/27 11:53:19.82 F9ScTckVM.net
どうもありがとう
ただ、なんかわからないのだが、ほかの所がエラー吐いてしまっています。
ちょっと死にそうですが、悩んでみます。
多分、また来ますw

242:デフォルトの名無しさん
22/02/27 12:19:45.80 So6tXBwD0.net
どうぞ~がんばって~

243:デフォルトの名無しさん
22/02/27 14:32:58.22 F9ScTckVM.net
>>235
おま、これすごい
これにしてみたら他に出たエラーもピシっと消えた
On Error は動いたけど、イレギュラーなパターンだとなぜか他でエラーになった
これも試したらイレギュラーでもバッチり
つーか、俺が昨日の夜中からずううとやっていてもこんなの作れないありがとう
ホント君らすげーよ
これ作るのに寿命を迎えるレベルだわ

244:デフォルトの名無しさん
22/02/27 14:49:32.88 So6tXBwD0.net
>>239
笑った
影響が最小限になるように、ちゃんと書く方が楽なんだよ
onerrorとかですっ飛ばすと、後で余計に大変になる

245:デフォルトの名無しさん
22/02/27 17:57:55.85 JWEArlQD0.net
関数て約500種類弱あるけど、全部マスターする必要あるのかな??
知人が、「Excelができる人材の定義は関数を全部マスターしているヤツの事だ!」とか言い出しているから

246:デフォルトの名無しさん
22/02/27 18:04:55.19 ZPGXXCGc0.net
VBAなら関数って自作が基本じゃないの?知らんけど

247:デフォルトの名無しさん
22/02/27 18:06:25.05 So6tXBwD0.net
>>241
>関数て約500種類弱あるけど、全部マスターする必要あるのかな??
ないよ

248:デフォルトの名無しさん
22/02/27 18:28:40.28 CUu39Gd8M.net
URLリンク(forest.watch.impress.co.jp)

249:デフォルトの名無しさん
22/02/27 18:34:38.78 a0+qdDh70.net
そら作れば無限に出来るわいな

250:デフォルトの名無しさん
22/02/27 18:39:37.90 tDC5899T0.net
>>241
EXCELが(凄く)できる人かEXCELが(初心者だけど)できる人では違うんじゃね

251:デフォルトの名無しさん
22/02/27 18:47:42.24 NFpbXNxz0.net
>>241
その知人に認めたくない人がいてExcelできる人で通ってるけど
関数はマスターしてないから言ってるだけ説

252:デフォルトの名無しさん
22/02/27 18:50:42.59 AJPusFVK0.net
知ってる関数の数なんて誇る奴がいたら失笑もんだわ

253:デフォルトの名無しさん
22/02/27 18:55:10.53 a0+qdDh70.net
標準の関数は少ないよな
俺はSUM CONCATENATE IFくらいしか覚えてない(ヘルプが必要)がその知人よりは多分出来ると思う

254:デフォルトの名無しさん
22/02/27 18:58:34.59 WwuIS/YcM.net
>>247
多分合ってるんだろうけどメッチャ理解し難いぐちゃぐちゃ関数式の様な日本語

255:デフォルトの名無しさん
22/02/27 19:18:55.52 Jrkr8SKF0.net
>>241
その知人が馬鹿なだけだぞ

256:デフォルトの名無しさん
22/02/27 19:50:11.71 So6tXBwD0.net
知人ぼろかすで草

257:デフォルトの名無しさん
22/02/27 19:54:03.00 XX45AiX5d.net
Excelにどんな機能がある=関数
ってしかいえない人の戯言では

258:デフォルトの名無しさん
22/02/27 20:40:55.89 D3HmGJ+n0.net
>>241
If 友人が「Excelができる人材の定義は関数を全部マスターしているヤツの事だ!」と言った then
  throw 友人 どこか
End If
以下正常処理

259:デフォルトの名無しさん
22/02/27 20:51:03.99 nGlHhzSe0.net
If 友人が Then
 Yo! Yo! チェケラYO!
 Go To YoYo
End If
YoYo:
Oh! Oh! 皆で楽しくチェケラYo!

260:デフォルトの名無しさん
22/02/27 21:11:45.66 JrRqc3Naa.net
If 友人.Count > 0 Then
のチェックをしておかないと例外が発生しかねんぞ

261:デフォルトの名無しさん
22/02/27 21:18:59.32 f8g0XzTm0.net
>>254
そこはRaiseだろ

262:デフォルトの名無しさん
22/02/27 21:27:51.88 So6tXBwD0.net
?友人 is nothing
true

263:デフォルトの名無しさん
22/02/27 21:34:07.20 nGlHhzSe0.net
確認事項
・友人はいますか
・親友はいますか
・彼女はいますか
・配偶者はいますか
・家族はいますか
・老後の心配はありませんか

264:デフォルトの名無しさん
22/02/27 21:42:34.72 NFpbXNxz0.net
>>250
知人A, 知人が認めたくない人B
Bは皆にできる人って思われてる
Aはそれが気に食わない
だから関数をマスターしていない事を理由に言ってるだけ説
ごめん頼んだ

265:デフォルトの名無しさん
22/02/27 21:46:20.69 pkdB1ort0.net
人生の大抵の困難はon erorr resume nextで解決可能である

266:デフォルトの名無しさん
22/02/27 21:52:09.54 nGlHhzSe0.net
On Error Shutdown And Reboot With Next Life

267:デフォルトの名無しさん
22/02/27 22:13:39.17 amhd0I0YM.net
>>262
例外処理が抜けてる
If You = カーズ Then
Do Until 地球からの距離 = 0
地球からの距離 = 地球からの距離 + 1
Loop
Elseif You = ディアブロ Then
死ぬ前:
死にそう
Goto:死ぬ前
死んだ
End if

268:デフォルトの名無しさん
22/02/27 22:37:19.46 oWne56vR0.net
Dim tmp As String
tmp = "どんまい"
MsgBox tmp

269:デフォルトの名無しさん
22/02/27 23:16:15.15 JWEArlQD0.net
関数そこまで必要かな?
マクロできるなら全部マクロでやれば良いじゃんね

270:デフォルトの名無しさん
22/02/27 23:42:12.81 Jrkr8SKF0.net
>>265
類は友を呼ぶ
お前もどうしようもない馬鹿だ

271:デフォルトの名無しさん
22/02/28 03:06:37.96 kykjWS4h0.net
いやだなぁ~先輩、冗談すよ冗談
職場になんでもVBA、VBAといってマジでVBAで片付けていた偉い人がいたもんでw

272:デフォルトの名無しさん
22/02/28 08:14:19.86 9UyyIrQV0.net
知人が、偉い人が、全て他人の話
ほんとうは・・・?

273:デフォルトの名無しさん
22/02/28 08:33:28.33 o5ZgQ4pV0.net
>>268
これ以上はやめて差し上げろ

274:デフォルトの名無しさん
22/02/28 18:59:30.44 h1aqAX/2M.net
すいません。 こういうのはできますか?
セルの中に改行を見つけてから止める(修正)するVBAをつくりました。
改行が見つかったら、マクロを止めて手修正をして又マクロを走らせてを繰り返します。
ここで、問題なのが改行ならいいのですが、文字が多くて折り返しになっているのがたまにあります。
それも見つけたいのですが、知恵がみつかりません。
折り返し判定みたいなのはあまりなさそうです。 それとも行の高さを判定できるなら高さ22以上とか方法があるのかな?と
すいませんが、こんなのは?ってありましたら、お願いします。

Sub test()
Dim Ws As Worksheet
For Each Ws In Worksheets
Ws.Activate
Dim row_shou As Long
row_shou = Range("A14:D150").Find("小 計").Row
Dim Target As Range
Set Target = Range(Rows(14), Rows(row_shou - 1)).Find(What:=vbLf)
If Not Target Is Nothing Then
End
End If
Next Ws
End Sub

275:デフォルトの名無しさん
22/02/28 19:29:28.20 o5ZgQ4pV0.net
>>270
一行以外を全て検出したいなら、行の高さを検出するだけで終わると思う
改行は調べなくてもいいような
Sub foo()
最終行 = Cells(Rows.Count, 1).End(xlUp).Row
基本の行の高さ = Cells(1, 1).RowHeight
For i = 1 To 最終行
If Cells(i, 1).RowHeight <> 基本の行の高さ Then
MsgBox i & "行目の高さがおかしいので、終了します。修正お願いします"
Exit Sub
End If
Next
End Sub

276:デフォルトの名無しさん
22/02/28 20:20:02.79 h1aqAX/2M.net
>>271
あ、あ、ありがとう
正直解読するのに一時間くらいかかって自分のに書き直せました。
一応動いていけそうです! 高さチェックでいけますね
こんなチンケな感じになりました。
神々に感謝します。
Sub test()
Dim Ws As Worksheet
For Each Ws In Worksheets
Ws.Activate
Dim row_shou As Long
row_shou = Range("A14:D150").Find("小 計").Row
'行の高さ15以上を検索
h = 15
For i = 14 To row_shou - 1
If Cells(i, 1).RowHeight > h Then
Exit Sub
End If
Next
Next Ws
End Sub

277:デフォルトの名無しさん
22/02/28 21:56:13.38 1x7bPtTEd.net
ぶっちゃけFindは滅多やたら使わん方が良いけどまあ良かったじゃん

278:デフォルトの名無しさん
22/03/01 18:55:07.17 gFYHZAxx0.net
なんでもスレだと更新が少なく答えがもらえなさそうなので、こちらにも書き込んですみません。
Excel VBAで質問です。
現在開いているシートにマクロボタンを作り、実行させると…
現在シートのB列に検索値
別のシート(ABC)のB列の5行目~400行目までを検索して一致したセル番号が欲しいのですが
For cnt=1 To 10 samsu(cnt)=WorksheetFunction.Match(Cells(cnt,1),Worksheets(”ABC”).Range(Cells(5,1),Cells(400,1)),0)

next
このMatch関数の正しい書き方を教えてもらいたいのですが。

279:デフォルトの名無しさん
22/03/01 22:29:13.54 Nv0Sds8Bd.net
ちゃんと見ていないが、とりあえず.cellsの前にも全部ワークシートを指定しよう

280:デフォルトの名無しさん
22/03/02 07:23:43.88 bacADaAbd.net
どっちでも好きな方をどうぞ
samsu(cnt) = WorksheetFunction.Match(Cells(cnt, 1), Worksheets("ABC").Range(Worksheets("ABC").Cells(5, 2), Worksheets("ABC").Cells(400, 2)), 0)
samsu(cnt) = WorksheetFunction.Match(Cells(cnt, 1), Worksheets("ABC").Range("B5:B400"), 0)

281:デフォルトの名無しさん
22/03/02 18:02:30.94 Dpz5qFA70.net
質問です
社員毎に月々の残業時間の合計プログラムを作っています
合計した数値に対して、30分で切り上げ切り捨てしています(会社の残業規定に則り)
(例えば、月4:10の残業であれば4:00として出力、月4:35であるば5:00として出力)
合計した数値に対してFloor関数を使って切り上げ切り捨てをしているのですが、
月23:30の残業をした社員がいた場合、出力された値が0になってしまいます
表示形式を[h]にしてみましたが、結果は変わりません
デバックでFloor関数の中の変数の値を確認しましたら、23:30のシリアル値はきちんと入っています
そうするとFloor関数で切り上げしているのが原因なのでしょうか?
どなたかご教示いただきたいです…

282:デフォルトの名無しさん
22/03/02 18:09:09.52 Dpz5qFA70.net
簡潔ですが、以下のようなコードで書いています
.cells(1,1).NumberFormatLocal = "[h]"
a = "23:30"
.cells(1,1) = Application.Floor(a + TimeValue("0:30"),TimeValue("1:00"))

283:デフォルトの名無しさん
22/03/02 18:13:22.97 ydQ1ic0a0.net
>>277
mroundで1:00単位でいいんじゃない
URLリンク(i.imgur.com)
>>278
24と表示されたよ。そのままだとエラーになるので、2行目はtimevalueにいれた
URLリンク(i.imgur.com)

284:デフォルトの名無しさん
22/03/02 18:43:03.81 Dpz5qFA70.net
>>279
MRoundにしてみたらできました!
ありがとうございます!
TimeValueについて書き損じ失礼しました
本来は"23:30"ではなく変数が入っていて、変数には23:30のシリアル値が入っています
なぜ0になってしまうのか謎ですが解決してよかったです

285:デフォルトの名無しさん
22/03/02 19:19:22.93 n7HPCvTSa.net
23時の次は24時ではなく0時だからだわな

286:デフォルトの名無しさん
22/03/02 19:25:50.55 ydQ1ic0a0.net
>>281
いや、書式設定が[h]なら24と表示されるはず

287:デフォルトの名無しさん
22/03/03 07:42:09.33 LvEeINitr.net
>>276
無事に動きました。
ありがとうございました。

288:デフォルトの名無しさん
22/03/03 13:47:21.71 KJVc8U50M.net
質問をさせていただきます。 理解ができないことがあります。
 まず、加工BOOK と マクロ保存BOOK の二種類を使用しています。
加工BOOKにある複数のシートを連続して加工するときにネット情報で下記書き方を拾いました。
Dim Ws As Worksheet
For Each Ws In Worksheets
Ws.Activate
~色々な動作~
Next Ws
この「色々な動作」の中で
ThisWorkbook.Activate ’マクロ保存BOOKをアクティブ(シート指定セル指定してコピーを取ってます)
その後、Ws.Activate と書き 上記保存した文字を指定したセルにペースト
これは問題なくペーストできています。
ただ、なぜうまくペーストできるのか理解ができていません。
理由はではこれをシート毎に連続ではなく一枚だけペーストにした場合
最初の For Each Ws In Worksheets と Next Ws を削除すればいいか?と思いやってみたのですが、エラーしか出ません。
てっきりWSという関数に加工BOOKの場所データが格納されていてWs.Activateを書けば加工BOOKに戻ってきていると思ったのですが、エラーとなると違っていたのか?と理解ができなくなりました。
加工BOOKのBOOK名とかが書ければいいのでしょう�


289:ェ、BOOK名(ファイル名)は不特定でやりたい。他人に渡すので環境が読めない。 最初にアクティブになっていたブックシート情報を関数に入れておけばよいと想像しているのですが、どうすればいいかとかわかっていません。 グダグダな質問でわかりにくいと思いますが、二つのBOOKを行き来して片方はマクロを作動させた時にアクティブだったシートって条件にしたいのです。



290:デフォルトの名無しさん
22/03/03 14:00:06.45 rCo9Fm7Z0.net
AvtIVeやらしてる時点で作者も大した事なさそう

291:デフォルトの名無しさん
22/03/03 14:13:34.66 9O05M6/x0.net
>>284
For Each Ws In Worksheets
Ws.Activate
~色々な動作~
Next Ws

sheets("ワークシート名").Activate
WSをWorksheet("ワークシート名")
に変える
あと、Ws.Activateはなるべくやめたほうがいい
PCが重くてアクティブなシートやブックが変わると、大惨事になる可能性がある
本当にやるならopenなどで対象ファイルを開き、戻り値をsetするのが理想
>>285
??

292:デフォルトの名無しさん
22/03/03 14:19:57.38 KJVc8U50M.net
>>286
ありがとうございます。
この”ワークシート名”が分からなくても動かしたいのです。
つまり、hogehoge.xlsx だったり zukozuko.xlsxだったりするので
最初にアクティブだったファイル(シート)に戻ってくる汎用性がほしい。

293:デフォルトの名無しさん
22/03/03 14:22:48.58 9O05M6/x0.net
>>287
あぁ、じゃあ
ActiveSheet
でいいよ
ActiveSheet.Cells(1, 1) = 1
みたいな感じで使える

294:デフォルトの名無しさん
22/03/03 14:24:24.97 9O05M6/x0.net
そういやブックを指定する時はopenでいいけど、
シート名が不定な時、シートを指定する方法ってないのか
一旦開いてinputboxにインデックスかシート名入れるぐらいしかないのだろうか

295:デフォルトの名無しさん
22/03/03 14:32:22.98 jSBR5AQpd.net
まずワークシートもワークブックもわかってない事から勉強したほうがよいのではないか
それとよくわからず何となく動いたものを他人に渡して大丈夫なのかと不安になるわ

296:デフォルトの名無しさん
22/03/03 14:43:43.44 9O05M6/x0.net
あんまり大丈夫じゃないけど、そこまで言うのもねぇ

297:デフォルトの名無しさん
22/03/03 15:56:08.71 KJVc8U50M.net
心配かけます
とりあえず、データは何回でもダウンロードできるのでいくら壊れても大丈夫です。
内輪の事務ですし
やはり、どんなファイル名(シート名)でもOKとなると難しいですかね
当然フルパスみたいに書くのが良いのはわかります。

298:デフォルトの名無しさん
22/03/03 16:16:41.04 jSBR5AQpd.net
加工されるワークブックにはワークシートは複数なの?それとも1つなの?
仮に先頭にあるワークシートであれば
Set Ws = Worksheets(1)
のような指定をすればいいだけだぞ
ワークシート名が決まった名前であれば
Set Ws = Worksheets("○○")
のような指定でもOK
どのシートが加工していいのかを判断できるなら当初のFor文で回しながらシートを特定してもいいかと思うが
ある程度のルールが決まった質問じゃないと漠然としすぎて回答する側もとまどうと思うぞ

299:デフォルトの名無しさん
22/03/03 17:11:57.48 AMDtBRAN0.net
>>284
>てっきりWSという関数に加工BOOKの場所データが格納されていて
Wsは関数じゃなくて変数
その変数に値をセットしていたのがFor文
>最初にアクティブになっていたブックシート情報を関数に入れておけばよいと想像しているのですが、どうすればいいかとかわかっていません。
Set Ws=ActiveSheet
かな。試してないけど
とりあえずForの代わりにこれで動くんじゃね
あまりにも基本がわかってない感があるなぁ

300:デフォルトの名無しさん
22/03/03 17:21:03.63 Vn+IwdQAd.net
コピペしかしない人なんでしょ

301:デフォルトの名無しさん
22/03/03 18:46:16.06 KJVc8U50M.net
>>294
はいすいません
関数は書き間違いです。変数ですよねw
ちょっと、脳が
Set Ws=ActiveSheet
で辻褄があいました。
最初の For Nextで全シートした場合も1シートだけやった場合もエラーが出ずに自分の脳みそも合致がいきました。
これを書いていないのに Forで動かしたときに問題なかったので???状態になっておりました。
ありがとうございます。

302:デフォルトの名無しさん
22/03/03 19:43:39.19 5R1CCyAZd.net
何ていうかVBAの言語より先にちゃんとした構文の日本語を学ぶ事をおすすめします

303:デフォルトの名無しさん
22/03/03 21:25:56.68 pVJYfbHP0.net
いやでも回答者さんの言うとおりだと思う。理屈や仕組み分からないまま使ったりしていたらいつかは大事故に繋がる。
過去にそういう事が身近であった。

304:デフォルトの名無しさん
22/03/03 21:46:06.24 jSBR5AQpd.net
何がきっかけで作ることになったか知らないけど
どうして動いてるかもわからずに作って少ししておかしいことに気づいてもすぐ直せなかったら評価悪くなると思うんだよね
自分の周りの出来事でなければ知ったことではないんだけどその辺は踏まえて作った方がいいよ

305:デフォルトの名無しさん
22/03/03 22:33:01.31 yer8R1MmM.net
ID:KJVc8U50M の言い回しが技術サイトでありがちな英語かロシア語の機械翻訳文に似てて草

306:デフォルトの名無しさん
22/03/05 11:35:29.63 lcqTf7BDd.net
!!Private Sub Worksheet_Change(ByVal Target As Range)
Dim i As Long
For i =1 to 5
cells(i,4)=DateValue(Cells(i,1)&" 年"&" 月"&Cells(i,2)&Cells(i,3)&"日")
Next i
End Sub
上記記述して実際にシートに数字を入力すると型が一致しませんとエラーになってしまいます
どうしていいのかわからずご教授していただければと
素人みたいな質問すいません

307:デフォルトの名無しさん
22/03/05 12:01:15.53 tG3yIb4ia.net
月の位置がおかしいから?w

308:デフォルトの名無しさん
22/03/05 12:21:43.22 RMBcHsBod.net
こういうひとってデバッグの仕方とか知らないのかね?
Debug.Print(Cells(i,1)&" 年"&" 月"&Cells(i,2)&Cells(i,3)&"日")
のようなことをすればどんな値が指定されているかわかるんだからみればいいのに
>素人みたいな質問すいません
素人でもこんな質問するかなという内容

309:デフォルトの名無しさん
22/03/05 12:21:43.61 6K6JgexZM.net
>>301
とりあえず止まったときにイミディエイトウィンドウで
Debug.Print Cells(i,1)&" 年"&" 月"&Cells(i,2)&Cells(i,3)&"日"
ってやってみな

310:デフォルトの名無しさん
22/03/05 12:22:36.15 6K6JgexZM.net
被ったわ…

311:デフォルトの名無しさん
22/03/05 12:39:47.23 /JtJWIIA0.net
そもそもVBAにする必要あるのかこれ?

312:デフォルトの名無しさん
22/03/05 12:51:19.12 lcqTf7BDd.net
>>301
Private Sub Worksheet_Change(ByVal Target As Range)
Dim i As Long
For i =1 to 5
cells(i,4)=DateValue(Cells(i,1)&" 年"& Cells(i,2)&"月"&Cells(i,3)&"日")
Next i
End Sub
すいません!
月の位置が違いました
上記の記述でも型が一致しませんとエラーになってしまいます

313:デフォルトの名無しさん
22/03/05 13:08:57.00 GCjMsc400.net
=Date(A2, B2, ... え?それ以上はやめとけって? はーい

314:デフォルトの名無しさん
22/03/05 13:15:31.27 RMBcHsBod.net
その書き方だと少なくとも変更された際のイベントでDateValueを正しく動作させるには
1から5行目までの1から3列目までにそれぞれ年月日の値が保証されないと型が一致しないとでるけど
そういう状態が担保できてるの?
1行目の入力中でもその書き方だと2行目以降が空欄だと単なる「年月日」という値でDateValue実行してしまいますよ

315:デフォルトの名無しさん
22/03/05 13:43:03.37 9H2YJJUDd.net
セルの中身が実はシリアル値でしたに一票

316:デフォルトの名無しさん
22/03/05 14:24:04.55 lcqTf7BDd.net
>>309
おっしゃるとおりだと
なんとなくわかっていたのですが
回避方法ありますか?

317:デフォルトの名無しさん
22/03/05 14:46:06.75 RMBcHsBod.net
>>311
いずれかのセルが空欄や数字以外だったら4列目に空を設定
それ以外の場合のみDateValueとかでいいんじゃないの
ただ結果的に月日が不正な値(99月など)ならどうするとかそういうのも含めて自分で考えないとこの先やっていけないのでは

318:デフォルトの名無しさん
22/03/05 14:57:28.77 lcqTf7BDd.net
>>313
なるほど
参考になります
ググって見ます!
ありがとうございます!

319:デフォルトの名無しさん
22/03/08 11:28:41.82 VC


320:o1qiqP0.net



321:デフォルトの名無しさん
22/03/08 11:33:03.86 e+QnjkryM.net
If Range("A1").Fomula = "" Then

322:デフォルトの名無しさん
22/03/08 11:33:45.29 e+QnjkryM.net
あ、嘘。ごめん。間違えた。忘れて。

323:デフォルトの名無しさん
22/03/08 11:39:20.91 VCo1qiqP0.net
>>315
ありがとうございます
Formulaを設定すると関数をそのまま取得してしまいました
なので空白の時の分岐ができませんでした

324:デフォルトの名無しさん
22/03/08 11:41:01.62 VCo1qiqP0.net
大丈夫です!
ありがとうございますm(_ _)m
ご存じの方いらっしゃいましたらよろしくお願いします

325:デフォルトの名無しさん
22/03/08 12:20:48.22 vjLwCjzB0.net
普通にセルのValueなりTextなりを見ればいいんじゃないの?

326:デフォルトの名無しさん
22/03/08 12:37:16.79 YxxaCHXb0.net
>>318
If Range("A1").value = "" Then
>>319
その普通を学習前の段階ぽい

327:デフォルトの名無しさん
22/03/08 13:18:52.50 +eE97yRCa.net
空なのか空白なのか

328:デフォルトの名無しさん
22/03/08 13:28:01.68 ez1E04nZd.net
Trim(.Text)じゃないか?
>>321
数式が入ってたらEmptyにはならん

329:デフォルトの名無しさん
22/03/08 14:12:30.12 vjLwCjzB0.net
Empty と空文字列と空白は違うって話かと

330:デフォルトの名無しさん
22/03/08 19:12:34.37 IBMOg+Z/0.net
前任者のシートで0を書式で空白にしてるのには参ったね
textプロパティを覚えるきっかけにはなったけど

331:デフォルトの名無しさん
22/03/08 19:25:23.65 fxoU/Jgx0.net
文字列枠だけど 書式は #
よくやるw

332:デフォルトの名無しさん
22/03/11 06:05:40.07 a7Y3SJRd0.net
すみません、質問させてください。
VBAで自作したクラスのメソッドやプロパティの一覧を列挙するにはどうすれば宜しいでしょうか?
どのような自作したクラスでも使える汎用的なものを作成したいです。

333:デフォルトの名無しさん
22/03/11 07:32:33.79 mh6S44cma.net
すみません。
特定のセル内に有るリンクを抽出する方法は有りますか?

334:デフォルトの名無しさん
22/03/11 08:32:32.67 vHBnGMWOd.net
>>326
VBAでは無理
ソースをエクスポートしてテキストファイルを処理するぐらいしかないと思う
VB.netならGetMembersってのがあるんだけど

335:デフォルトの名無しさん
22/03/11 08:33:31.79 vHBnGMWOd.net
>>327
Hyperlink

336:デフォルトの名無しさん
22/03/12 01:24:13.27 7NvJtuE10.net
>>328
なるほど、VBAでは無理なんですね。
以前、VB.Netの命令をVBAで走らせることが出来る場合があることをこのスレで聞いたことがあるような気がしましたので、
そちらとAPIで実装出来ないかを模索してみます。ありがとうございました。


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch