Excel VBA 質問スレ Part65at TECH
Excel VBA 質問スレ Part65 - 暇つぶし2ch10:デフォルトの名無しさん (ワッチョイ 0bef-ED79)
20/03/19 06:45:24 3WIKr7Ue0.net
>>9
うちのExcel2016だと隠れないけど、それ以降だと違うのかな
リボンの下に表示offでもだめなら
フォーム作って、UserForm.ShowModal=False という手もあるよ

11:デフォルトの名無しさん (ワッチョイ 13ad-0a0A)
20/03/19 23:50:18 7Zzxd2N00.net
>>10
>>9
UserForm.ShowModal=False はどういう方法?

12:デフォルトの名無しさん
20/03/20 00:29:09.01 cQ88e7Ay0.net
>>11
自作フォームをカスタマイズメニューに見立てて自作のマクロなどを呼び出す

13:デフォルトの名無しさん
20/03/20 08:35:07.45 SwKaoqcN0.net
>>12
マクロを呼び出すのは簡単なんだけど、各コマンド(既存の機能)をよびだすのかできない
たとえば描写とかペンとか消しゴム機能とか

14:デフォルトの名無しさん (ワッチョイ 1342-AP1B)
20/03/20 08:58:05 8tNMwiiZ0.net
既存の機能が必要ならリボンを非表示にしなきゃ良いんじゃね

15:デフォルトの名無しさん
20/03/20 11:45:56.36 gOi7n73D0.net
>>13
SendKeys "% ~

16:デフォルトの名無しさん
20/03/20 12:04:13.08 kTqu2sOZ0.net
>>15
ショートカットキーを設定してってことかな?

17:デフォルトの名無しさん
20/03/20 12:36:23.76 dFakeV1fa.net
csvを読む場合で、見出し行とデータ行が文字と数値で形式が違う場合とかどう処理しますか?

18:デフォルトの名無しさん
20/03/20 12:41:37.47 FhkC8bvBx.net
>>17
パワークエリで読み込んで任意のデータ型に変換する

19:デフォルトの名無しさん
20/03/20 13:27:20.08 jE5Tt0oL0.net
>>17
CSVを読み込む場合にブックとして読み込むことはまず無い。
というか、まずテキストとして読み込む。
処理も何も、全て自由に出来るぞ。

20:デフォルトの名無しさん (ラクッペペ MMeb-6U2m)
20/03/20 19:47:02 1JHTKX/vM.net
>>17
全部文字として読み込む。コードで数値として処理したいならcintやcdblでキャストすればいい。因みにワークシート関数にはNumberValueってのがある。

21:デフォルトの名無しさん (ワッチョイ 81da-ED79)
20/03/20 19:50:02 wHnf8pbD0.net
あれなんとかならんかな。
NULLがあるとコケるから、
いちいちIIF(A IS NOT NULL, CINT(A))ってやらなきゃいけないの。

22:デフォルトの名無しさん (ワッチョイ 8b46-m7vt)
20/03/22 12:27:27 bv32jkb00.net
VBA で、セルの指定しても行の指定が無効になってて、必ず1行目に表示されてしまいます。
何が原因でしょうかね?
教えてください。

23:デフォルトの名無しさん (スプッッ Sd33-dSJs)
20/03/22 12:28:32 hR7PxyLud.net
>>22
お前の馬鹿頭

24:デフォルトの名無しさん (ワッチョイ 8b46-m7vt)
20/03/22 12:35:14 bv32jkb00.net
原因わかりました。すみませんでした。

25:デフォルトの名無しさん (ワッチョイ 8b46-m7vt)
20/03/22 12:36:52 bv32jkb00.net
ここの住民の霊性は暴力団と同じですね

26:デフォルトの名無しさん (ブーイモ MM4d-O7/r)
20/03/22 13:22:11 TNUWFKUeM.net
ここだけじゃなく5chはどこも似たり寄ったりです
貴方が来るような場所じゃありません

27:デフォルトの名無しさん
20/03/22 14:47:18.63 9uw1USbo0.net
>>25
霊性?
馬鹿確定
原因としては正しかっただろうが

28:デフォルトの名無しさん
20/03/22 15:26:01.73 bTaHgmHe0.net
>>22
ソースコード書けないの?
君書いたのが本当にセルの指定をしてると信じる人がいるとでも?

29:デフォルトの名無しさん
20/03/24 17:30:30.61 s99Qd4t60.net
よろしくお願いします。
数百行あるシートで、上から順に一行ずつ以下の操作を行いたいです。
(1) C列の文章の中に、「一言コメント:」という文字が入っていれば2へ。なければ終わり、次の行へ
(2) 「一言コメント:」とそれ以下の文字列をC列の値から削除し、E列の、元々の値(文字列)の前に貼りつけ
(3) E列の文字列の中から「「一言コメント:」という文字列を削除
以上です。
まず、(1)の検索がうまくいかず、(2)の文字列取得も、一文字ずつ数えてカウントし、あらためて「終わりから○文字」みたいな
やりかたをするしか方法が浮かびません。
たぶん、上級者ならもっとシンプルな書き方ができるのではないかと思い質問させていただきました。
どのように書けばよいでしょうか?よろしくお願いいたします。

30:デフォルトの名無しさん
20/03/24 17:42:47.48 2RYGBfo0M.net
For文をRowCntって変数で回していると仮定して
If Cells(RowCnt, 3).Value Like “*一言コメント:*″ Then
で引っかけるとか?

31:デフォルトの名無しさん
20/03/24 17:58:43.96 BIkwDKwH0.net
VBAなくても関数だけで目的達成しそう

32:デフォルトの名無しさん
20/03/24 18:33:24.09 n56XI6Ab0.net
>>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

33:デフォルトの名無しさん
20/03/24 18:34:45.78 qnUBImldr.net
>>15
どんな機能でもショートカットキー設定できるの?

34:デフォルトの名無しさん
20/03/24 19:30:25.33 sgSRB3ii0.net
>>29
VBAでないとだめなわけじゃないならExcel関数でやればいいと思う

35:デフォルトの名無しさん (ワッチョイ d1e6-tCoU)
20/03/24 19:56:22 Yvy0BDEM0.net
>>33
Alt押してみ

36:デフォルトの名無しさん (ワッチョイ 41ce-ED79)
20/03/24 22:01:18 PstaeSXz0.net
>>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:デフォルトの名無しさん (ワッチョイ 13b5-Edxj)
20/03/24 22:44:45 Sir7Hwfr0.net
ここは上級者向け?
ド素人が少しずついろんなサイトや動画見て覚えようとしてるレベルじゃダメかな

38:デフォルトの名無しさん (ワッチョイ 41ce-ED79)
20/03/24 23:20:41 PstaeSXz0.net
>>37
初心者も上級者もキチガイも見てる
みんなが毎日見てるわけじゃないから、タイミングが悪いと質問に答えてもらえないこともある

39:デフォルトの名無しさん (ワッチョイ 695f-n/Wf)
20/03/24 23:41:15 VeKTJmtj0.net
いろんなサイト見た方が早い

40:デフォルトの名無しさん (ワッチョイ b1f1-Go5d)
20/03/25 09:15:56 nn3rUaIL0.net
FileSystemObjectでFilesのコレクションょ取得したあと
それぞれにアクセスするにはどうしますか?
Files(1), Files(2)のようにするとエラーが出てエラいこっちゃとなります。
For each文ならできるのですがそこまでするほどのことではない時には?

41:デフォルトの名無しさん (ワッチョイ ad49-iBrl)
20/03/25 10:04:11 34Te7/8G0.net
コレクションょ

42:デフォルトの名無しさん (ワッチョイ b1f1-z4rF)
20/03/25 10:44:44 nn3rUaIL0.net


43:デフォルトの名無しさん
20/03/25 10:51:51.28 34Te7/8G0.net
暇だし、見てみた
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とか分かりやすいがね

44:デフォルトの名無しさん (ワッチョイ b1f1-z4rF)
20/03/25 12:51:44 nn3rUaIL0.net
itemでナンバリングされていないんじゃないか?
だからitem(1)やitem(2)で取得できないのでは。
それゃファイル名を()の中に書けば取得はできるけど。

45:デフォルトの名無しさん (アウアウウー Sacd-cy2b)
20/03/25 15:03:09 jqzDDJlwa.net
for each でいいやん

46:デフォルトの名無しさん
20/03/25 15:55:41.50 e/5QJMyr0.net
「そこまでする」の考え方がまずおかしい
中身がたとえ1個でも2個でも普通はコレクションにはFor Eachを使うもんだぞ

47:デフォルトの名無しさん
20/03/25 16:09:28.13 nn3rUaIL0.net
>>45-46
このハゲー!
違うだろ!
最初にfor eachはやらないと言った。
コレクションの代表ということで任意の1個だけを選んでそのプロパティ等を調べる、
ということはプログラミング経験がある程度あればそういう状況に遭遇することはたまによくある。

48:デフォルトの名無しさん
20/03/25 16:14:59.17 z6ZaQbmPr.net
fsoのfilesコレクションには通常のコレクションみたいにインデックス指定が出来ないのよね
countとitem(key)プロパティしかない
ファイルシステムの違いとか、歴史的経緯からかはしらんけど
だから基本for eachで他の形にする

49:デフォルトの名無しさん
20/03/25 16:19:47.29 nn3rUaIL0.net
>>48
そんなことはとおの昔に知ってるから
ここで質問をしたのだ。

50:デフォルトの名無しさん
20/03/25 16:24:52.66 RkpcsgMW0.net
ID:nn3rUaIL0
馬鹿は死ね

51:デフォルトの名無しさん
20/03/25 16:33:07.81 dd26zMYGr.net
では次の方

52:デフォルトの名無しさん
20/03/25 18:54:52.80 acV7Q0T20.net
インデックスが使いたいなら自分で配列でも作り直せばいいのに

53:デフォルトの名無しさん
20/03/25 19:07:44.86 99YP/w74d.net
不毛だな

54:デフォルトの名無しさん (ワッチョイ 092f-2pFN)
20/03/25 20:08:34 xy/tXdFS0.net
Exit Forすればいいんじゃまいか

55:デフォルトの名無しさん (ワッチョイ adda-Cd0d)
20/03/25 21:06:02 POb+XADc0.net
OpenDocumentスプレッドシートのデータをADOで取得する方法ある?
EXCELに変換しろってのは無しで。

56:デフォルトの名無しさん (ワッチョイ 1242-IfT6)
20/03/25 21:06:24 UODWeex90.net
>>44で自分で答だしてんじゃん

57:デフォルトの名無しさん (ワッチョイ 092f-2pFN)
20/03/25 22:04:41 xy/tXdFS0.net
ドライバ自作しろ

58:デフォルトの名無しさん (ワッチョイ 9eba-OKiD)
20/03/25 22:39:59 8ZIjWfpj0.net
プラスとマイナスはあるから丸ドライバー作るわ

59:デフォルトの名無しさん
20/03/26 02:21:13.92 THyEKc6a0.net
ファイル入出力に使うopenやinputが何者か(関数?メソッド?など)知りたいです
これらの機能はなぜオブジェクトブラウザに乗っていないのでしょうか
マイクロソフトのウェブヘルプにはステートメントとして乗っているようですが
ステートメントというのは関数やメソッドなどの分類ではないですよね?
ご教示お願いします。

60:デフォルトの名無しさん
20/03/26 02:34:21.94 bMQizyKS0.net
>>59
ステートメントというのは関数の祖先にあたる概念
コンピューター言語が発明された初期からある命令文の分類の一つ

61:デフォルトの名無しさん (ワッチョイ 558e-7Ena)
20/03/26 10:58:51 NTuSOeK50.net
馬鹿に馬鹿が答えている

62:デフォルトの名無しさん
20/03/26 13:11:56.44 d196EOchM.net
VBAを覚えようとしてる初心者以前だが
まず何となくルールから覚えてる
=は同じじゃなくて←の意味ぐらいにとらえておく
あとはコードというか使いそうな単語を少しずつ
msgboxとかRangeとかactivecellとか
でもとっかかりがわからんわ
難しすぎですな…

63:デフォルトの名無しさん (ワッチョイ ad49-iBrl)
20/03/26 14:44:13 HulDeUE70.net
覚えるのは結構だけど、普段やってる作業をVBAで再現するとこから始めると飽きずにやれるんじゃ

コピペ作業、シートコピー、ボタンで特定の計算とかね
だんだんCSV読みたくなったりして高速化したくなったりして、そうやって覚えていく

64:デフォルトの名無しさん (ワッチョイ 5e46-k/jz)
20/03/26 15:50:36 ZD929brT0.net
TEST

65:デフォルトの名無しさん (ブーイモ MMad-FSgb)
20/03/26 15:54:11 hp54jNs9M.net
ユーザーフォーム上にあるボタン1を押すとボタン1を非表示にしてフォームのキャプチャを取得。
その後ボタン1を再び表示して終了。

みたいなものを作りたいのですが
SendkeyでAlt+Printscreenを送っても
素の状態ではボタン1が残った状態のものがキャプチャされ、
Waitをかけると今度は画面全体のキャプチャになってしまいます。

フォームをダイレクトに画像ファイルにする、とかでも良いのですが調べても中々応えに辿り着けなかったので皆様のお知恵をお借りしたいです。
何か良い手はないでしょうか。

66:デフォルトの名無しさん (ワッチョイ 5e46-k/jz)
20/03/26 15:56:47 ZD929brT0.net
以下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

67:デフォルトの名無しさん
20/03/26 17:09:13.21 hp54jNs9M.net
すみません。
情報の伝達に齟齬がありました。
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

68:デフォルトの名無しさん
20/03/26 17:44:04.29 sBp41OLkr.net
MacでもVBA使えますか?

69:デフォルトの名無しさん
20/03/26 18:35:55.24 GuVxnbOZ0.net
使えるけどwindowsと全く同じように動くかまでは知らん

70:デフォルトの名無しさん (アウアウウー Sacd-pf+t)
20/03/26 19:05:03 58MBAwKca.net
新しい天啓が下った。私は馬鹿ですらなく、場であり、これが私の仕える神のような気がしたが違ったような気がした。
忠実に表現したらこうなった、つまりそういうことなんだろう。

71:デフォルトの名無しさん
20/03/26 19:41:20.92 m6KuD/Rj0.net
>>66
標準モジュールに書いてるか

72:デフォルトの名無しさん (ワッチョイ 9201-z4rF)
20/03/26 21:11:00 rWIrO2cB0.net
WEBクエリはhttpsだと遅いすか?
そうなったサイトが急に読み込み遅くなったんすけど

73:デフォルトの名無しさん (ワッチョイ 92b5-McJq)
20/03/26 21:24:14 Ys9zNHHg0.net
初心者はまずここ見とけみたいなサイトとかYouTubeの動画ありますか?
宣伝込みでも俺が踏むだけなので良かったら教えて欲しいです
本当に何から見てけばいいのかわからない
asとかretとか当たり前に出られてもわからない…

74:デフォルトの名無しさん (ワッチョイ b18f-+ryc)
20/03/26 21:26:43 Ye2KpVaE0.net
知らんがな入門書買え

75:デフォルトの名無しさん (ワッチョイ a9ad-yXVd)
20/03/26 22:06:31 NUJ56fsj0.net
>>73
動画でプログラミングを覚えるのはとても難しい
エクセルの使い方や開発環境の整備とかなら分かるけど
言語を覚えるのは本を読んでコードを書く方が早いだろう

76:デフォルトの名無しさん (ワッチョイ b6c9-Cd0d)
20/03/26 22:19:37 ohlAwein0.net
>>73
URLリンク(www.sejuku.net)

77:デフォルトの名無しさん
20/03/26 22:35:41.45 ewzEtFoA0.net
retって何?

78:デフォルトの名無しさん
20/03/26 23:38:44.50 Ys9zNHHg0.net
>>75
>>76
ありがとう
とりあえず、マクロからあるURLやoffice系のソフトを呼び出すコードをネットから丸パクリしてみたんだけど結局これが良いのか悪いのかそもそもルールすらあまりわかってない
サイトや本で必死に勉強しますわ
URLリンク(i.imgur.com)
URLリンク(i.imgur.com)

79:デフォルトの名無しさん
20/03/26 23:56:44.93 ewzEtFoA0.net
字で書けよ基地外か

80:デフォルトの名無しさん
20/03/27 00:31:59.82 N3mE/9bh0.net
図形のグループ化についてです。
ショート上に円が無数にあってその円の中にテキストがあります。
これを円と円の中のテキストをそれぞれグループ化してShapeの名前をテキスト名にするにはどうしたら出来ますか?

81:デフォルトの名無しさん
20/03/27 00:52:28.07 tkT1AEpsM.net
>>80
グループ化はGroupメソッドを使う
For Eachを使えば図形がいくつあっても関係なく同じようにできる

82:デフォルトの名無しさん (ワッチョイ b57c-K+F1)
20/03/27 01:56:14 U7Hbc3is0.net
>>80
shapeオブジェクトでいじる

83:デフォルトの名無しさん
20/03/27 07:59:14.92 PIWgxOzWr.net
図形をVBAで複雑にいじろうとすると悲しみしか生まなさそう

84:デフォルトの名無しさん (ワッチョイ 55e3-pf+t)
20/03/27 14:44:48 Kq8lniUe0.net
Worksheets("min").Range(Cells(N, 2), Cells(N, 100)) = "999"
これで複数セルに一括入力したいのですが
アプリケーション定義またはオブジェクト定義のエラーです
と出ます。
何がいけないのでしょうか?

85:デフォルトの名無しさん (ワッチョイ d9da-Cd0d)
20/03/27 14:53:12 8yKTqVer0.net
Nを定義してないんじゃない

86:デフォルトの名無しさん (ラクッペペ MM96-6Ghe)
20/03/27 15:00:54 n40dB020M.net
cellの前にもシートがいる

87:デフォルトの名無しさん (ワッチョイ 55e3-pf+t)
20/03/27 15:04:48 Kq8lniUe0.net
With Worksheets("min")
.Range(.Cells(1, 1), .Cells(20, 2)) = "999"
End With

できました^^ありがとう

88:デフォルトの名無しさん (アウアウエー Sada-pf+t)
20/03/27 15:09:58 Yr4iTEmOa.net
それでいい。

89:デフォルトの名無しさん (ワッチョイ ad49-iBrl)
20/03/27 15:11:53 DMhVWYPv0.net
いえいえ

90:デフォルトの名無しさん (アークセー Sx79-yXVd)
20/03/27 15:32:49 YTZoRU62x.net
検索して違うシートから値を 持ってくるマクロで持ってくる値が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:デフォルトの名無しさん (ラクッペペ MM96-6Ghe)
20/03/27 15:39:00 n40dB020M.net
cがnothingの時c.rowがエラー

バラせ

92:デフォルトの名無しさん
20/03/27 15:47:38.09 LyEUyxQ10.net
馬鹿がゾロゾロ出てくるのは何で?

93:デフォルトの名無しさん
20/03/27 15:50:59.76 DMhVWYPv0.net
春休みだから

94:デフォルトの名無しさん (アークセー Sx79-yXVd)
20/03/27 15:54:33 YTZoRU62x.net
>>91

If wS1.Cells(c.Row, "Z").value < 0 Thenでもエラーが出ます
With Worksheets("data")が邪魔をしてるとかですか?

95:デフォルトの名無しさん (ワッチョイ f6f7-DNZ3)
20/03/27 17:17:35 zsNWkQiw0.net
"Z"で指定できたっけ

96:デフォルトの名無しさん (ワッチョイ 8101-yKOS)
20/03/27 17:31:46 jaIOieAQ0.net
>>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プロパティで呼んだ方がいい

97:デフォルトの名無しさん (ワッチョイ ad2c-yXVd)
20/03/27 21:24:53 N7XAdwe70.net
>>92
答らえれない馬鹿以下の癖に?

98:デフォルトの名無しさん
20/03/27 23:01:00.96 7yWnOCeY0.net
範囲に名前はなぁ・・。
上手く使いこなせればいいが、
みんなで共有するファイルに使うと、
知らない間に#REFだらけになってるwwww

99:デフォルトの名無しさん
20/03/28 04:38:00.47 vMIAuVeU0.net
>>71
レスありがと
標準モジュールに書いてない。
しばらく、やってなかったんで忘れていた。
すみません

100:デフォルトの名無しさん (ワッチョイ b140-yKOS)
20/03/28 15:07:25 m/WQBFmt0.net
>>98
異常時に例外が投げられるように設計するのは普通だと思うんだが・・・

101:デフォルトの名無しさん
20/03/28 19:20:50.03 rI/k2Pjrd.net
>>100
名前を付けるのは、コードと関係無い所で実装されるので個人的には絶対使わない。
というか、Cellsを使うよ。
2次元配列的にもぴったり来るし。
寧ろ、Rangeの方が使わない。
尤も、Cellsでも列を文字で指定するのはやらない。
AF列が何列目か分からないって?
イミディエイトで?Range("AF1").Columnとでも入れてみろ。

102:デフォルトの名無しさん (ササクッテロ Sp79-CIkl)
20/03/28 20:14:42 ihCuPYYIp.net
>>101
で、コメントで何列かとか、項目名とか書くわけ?

103:デフォルトの名無しさん (ワッチョイ a9ad-yXVd)
20/03/28 20:37:45 YbqXlWqq0.net
>>96
>>101
名前を付ける派
可読性が高い方が良い
VBAは見にくいコードが多い

104:デフォルトの名無しさん (ワッチョイ b140-yKOS)
20/03/28 23:45:34 m/WQBFmt0.net
>>101
名前定義が弄られるってことはロックしないで使うんでしょ
猶更、セル挿入なりで意図した場所とズレてても気づかずに成功し続ける方が危険だと思うんだが
で、セルを挿入したい時も一個一個数値をずらしていくの?

ワークシートの見た目が二次元配列である事とコード内容を一致させる必要性も感じないんだが、
もしかしてハードコーディングしてるのか?

イミディエイトウインドウで毎回インデックスを調べろっていうは面白すぎるから止めて欲しい

105:デフォルトの名無しさん (ワッチョイ 091f-hvDm)
20/03/29 00:11:14 JMfmjWXB0.net
Shapeの当たり判定の計算方法を教えて下さい。

基準の円のShapeにTextBoxが当ってたらTrue、当たって無ければFalse
円は選択時の□の面積じゃなく実際の円の大きさ。TextBoxは選択時の□の大きさ。

106:デフォルトの名無しさん (ワッチョイ 79ac-iBrl)
20/03/29 00:41:59 Q4J2OaKi0.net
なぜそんなことを

107:デフォルトの名無しさん
20/03/29 01:29:27.30 Iv7ta0000.net
>>105
表示位置とサイズから比較したらいいんじゃね

108:デフォルトの名無しさん
20/03/29 01:42:07.54 hSuS8nXs0.net
当たり判定だからゲームじゃないの?
Corei世代でも60fpsでないから使いたくないけど。

109:デフォルトの名無しさん (ワッチョイ 0dce-Cd0d)
20/03/29 08:29:34 sBDU9ajX0.net
>>105
専用の関数などは用意されてないので、TextBoxの頂点と円の座標を比較したり、円の中心からの距離を三角関数で計算して調べるしかない

110:デフォルトの名無しさん
20/03/29 09:06:15.85 hrvcX8VW0.net
VBAであえてゲーム作ったりするのは
芸ではあるけど開発効率的に筋は悪いよね
グラフィックにこだわるなら別言語推奨

111:デフォルトの名無しさん (ワッチョイ 4191-tYYp)
20/03/29 19:07:35 +LkL5rVp0.net
>>102
普通は定数で行、列を宣言するわな。

>>103
見にくいコードは書いてる奴の力量次第だろ。

>>104
ロックはしない。
そんなもんは解除されるかもしれんし、当てにしない。
というか、作ってるもの次第だね。

ワークシートの見た目と二次元配列を一致させるとか笑わせるなあ。
少し慣れた奴なら列も数値で扱うのがぴったり来るんだよ。
何故なら、最初から二次元配列的に考えるから。

VBE上に自作のメニュ―作って、入力するだけで列名←→列数はわかるげとな。
作る力量無い奴はイミディエイトで調べりゃ良いだろ。
VBEのCommandBerでイベント扱うのはクラスが必要だし、上級者の領分にはなるかもな。
VBE弄るVBAは会社じゃ使わないから通常のCommandBarでメニュー作ってやっても良いんじゃね?
どっちにしても時間は考えることに使ってるんで、毎回イミディエイトで調べても大した話じゃね―んだわ。

112:デフォルトの名無しさん
20/03/29 19:28:33.88 Gw3heoMsM.net
>>63
今の若いヤツらはそういう説明じゃ200%挫折する。普段の業務を自動化っていう感覚がわからないそう。やっぱスマホタブレット世代はPC=ワープロにしか思えんのかもな。

113:デフォルトの名無しさん (スププ Sdb2-Ik0M)
20/03/29 20:04:11 83saJEjVd.net
若いほうがわかりそうなイメージあるが

114:デフォルトの名無しさん (スププ Sdb2-Ik0M)
20/03/29 20:07:10 83saJEjVd.net
>>111
ロック外されたくないならパスワード付ければいいじゃん

115:デフォルトの名無しさん (ワッチョイ 4191-tYYp)
20/03/29 20:28:31 +LkL5rVp0.net
>>114
パスワードwww

116:デフォルトの名無しさん (ワッチョイ 9201-aXsr)
20/03/29 20:55:58 wDs4yIM00.net
>>111
> VBE上に自作のメニュ―作って、入力するだけで列名←→列数はわかるげとな。
まさか自慢じゃないよね?w
傍から見てたら馬鹿なことしてるなとしか思えんし

117:デフォルトの名無しさん (ワッチョイ 12ad-At9V)
20/03/29 22:56:25 WhhHvRXO0.net
共有編集可能にしたら更新は5分間隔だけどVBAとかで1分以内にできないかな?複数のパソコンで映してる同じエクセルファイルの内容を別のパソコンから共有編集で編集して保存したら1分以内に複数のパソコンにも表示を反映させたい。

118:デフォルトの名無しさん (アウアウエー Sada-pf+t)
20/03/30 01:33:21 hihORIFda.net
あ、どうせ、コピーしても意味ねぇよ。記憶してるのPCじゃねぇから。

119:デフォルトの名無しさん (アウアウエー Sada-pf+t)
20/03/30 01:33:39 hihORIFda.net
考えまとめるためにPC使ってるだけ、ただそれだけなんだよ。

120:デフォルトの名無しさん (ワッチョイ 4191-tYYp)
20/03/30 09:44:28 c+7OLkMF0.net
>>116
君にできないからと言って、そんなもんが自慢になると思うかね?

121:デフォルトの名無しさん (オッペケ Sr79-7qnn)
20/03/30 10:45:50 44eTx7Dtr.net
>>96
それでも同じエラーが出ます…

122:デフォルトの名無しさん
20/03/30 10:57:15.53 XiEELtFfM.net
>>120
日本語の理解力がないのかな?
自慢にもならないことをいちいち書くとかバカじゃね?
って言う事な

123:デフォルトの名無しさん (ワッチョイ f6f7-DNZ3)
20/03/30 12:35:49 rHF2nN3k0.net
>>121
wS1.Cells(c.Row, "Z").value < 0
そもそもこれ必要?

124:デフォルトの名無しさん
20/03/30 13:30:25.60 8cfGBpvw0.net
いや、いらないのはそっちじゃなくて、ElseIf~ のIf~Then
If Not c Is Nothing Then
If wS1.Cells(c.Row,"Z").value<0 Then
.Cells(i, "V") = wS1.Cells(c.Row, "Q")
Else
.Cells(i, "X") = wS1.Cells(c.Row, "Q")
Endif
Endif
でいいはず
エラーが出たのが実は一つ上の行で、i に代入してなかったってオチじゃないよね

125:デフォルトの名無しさん (スッップ Sdb2-tYYp)
20/03/30 15:51:59 pRaklD1Wd.net
>>122
悔しいからって一々反応しなくて良いんだぞwww

126:デフォルトの名無しさん (ドコグロ MM9a-aXsr)
20/03/30 15:58:49 5QM7gMbqM.net
>>125
ブーメラン乙w

127:デフォルトの名無しさん (スフッ Sdb2-Cd0d)
20/03/30 16:25:47 Ds9EzL2Md.net
反応したら負けだと(みんな)思ってる

128:デフォルトの名無しさん
20/03/30 17:08:01.39 nRSFIrFT0.net
どこで受けたストレスをここで発散してるんだろう・・・

129:デフォルトの名無しさん (ドコグロ MM71-aXsr)
20/03/30 19:49:19 JBOku6fCM.net
>>127
>>125に言ってやれよw

130:デフォルトの名無しさん
20/03/30 20:13:35.71 4l2N9sosM.net
ここの人等は本当にきついね
一部だけかもしれんけど
他スレ建ててもどうせそこにやってくるし困ったもんだ

131:デフォルトの名無しさん
20/03/30 20:19:47.92 jrEvufLB0.net
いいから質問しろよ
俺が優越感感じられるように割と簡単なやつな

132:デフォルトの名無しさん
20/03/30 20:23:47.47 z27088IIa.net
ワロタw
ワイもドヤ顔で回答したい

133:デフォルトの名無しさん
20/03/30 20:33:15.75 mnH7Xf0t0.net
禿げのくせに

134:デフォルトの名無しさん
20/03/31 00:31:58.74 O8i/VRws0.net
>>133
このハゲ!

135:デフォルトの名無しさん
20/03/31 00:37:41.25 fAiG3E7e0.net
天才な人、教えて下さい。
フォルダAの中にフォルダa1があってこの中にxxx.zipがあるとします。
このxxx.zipを直接クリックしたりしないで解凍するプログラムを書くのはVBAで可能でしょうか?

136:デフォルトの名無しさん
20/03/31 00:57:46.12 x9NcPTe/0.net
たまたま知ってたけど天才じゃないから教えられない
残念です
無念です

137:デフォルトの名無しさん
20/03/31 01:02:53.10 x9NcPTe/0.net
俺も天才じゃないんだわ
いるんか?このスレに、天才が

138:デフォルトの名無しさん
20/03/31 02:01:24.29 PSx1iNyN0.net
>>135
馬鹿は死ね

139:デフォルトの名無しさん
20/03/31 02:22:12.33 CMEsfttX0.net
>>135
「powershell zip 解凍」で検索!

140:デフォルトの名無しさん (ワッチョイ 8101-tylh)
20/03/31 03:29:43 fAiG3E7e0.net
>>139
どうもありがとう!

141:デフォルトの名無しさん (ワッチョイ 12ad-7qnn)
20/03/31 03:37:14 sCGR7IuL0.net
>>117って難しい?

142:デフォルトの名無しさん
20/03/31 05:23:52.03 kiJT2Kt60.net
zipをxlsxにすれば、VBAを使わなくても開くだけで解凍できる。どこに解凍されるかは知らんが。

143:デフォルトの名無しさん (スッップ Sdb2-tYYp)
20/03/31 08:15:19 AMZVbv8Gd.net
>>126
zip解凍ぐらい大して難しく無いんだから答えてあげたら?

144:デフォルトの名無しさん (ドコグロ MM1d-aXsr)
20/03/31 08:25:37 FZ3Oti5EM.net
>>143
既に>>139で答えられてるだろ
スレの流れも追えないのか?w

145:デフォルトの名無しさん (スッップ Sdb2-tYYp)
20/03/31 08:42:47 AMZVbv8Gd.net
>>141
VBA 共有編集でググレば参考になる所が出てくる。

146:デフォルトの名無しさん (スッップ Sdb2-tYYp)
20/03/31 08:43:03 AMZVbv8Gd.net
>>144
バーカwww

147:デフォルトの名無しさん
20/03/31 09:32:50.09 WgVk0vye0.net
うゎ、真性かよw

148:デフォルトの名無しさん (ワッチョイ b18f-+ryc)
20/03/31 13:30:22 UcE7ogps0.net
そういやxlsxがそもそもzipファイルなんだよな

149:デフォルトの名無しさん (ワッチョイ d9e5-n60N)
20/03/31 22:47:10 Rc1BoApG0.net
そーなのか
道理で大昔作ったフォーマットを作り直してみたら容量が半分程度だったんだ
効率的なコード書けるようになった俺スゲーって訳じゃなく、エクセルさんが凄かったのね

150:デフォルトの名無しさん (ワッチョイ 9bf7-14eV)
20/04/01 01:30:54 IClGbcwW0.net
拡張子zipにして展開すると画像ファイル取り出せるしな

151:デフォルトの名無しさん (アウアウウー Sae9-f+0C)
20/04/01 02:22:12 06G29rGEa.net
今さら次郎

152:デフォルトの名無しさん (ワッチョイ 155f-P5Sm)
20/04/01 03:04:48 Ex6pONtn0.net
これから三郎

153:デフォルトの名無しさん (ワッチョイ e5ad-KN+/)
20/04/01 03:32:39 8LLFjcSO0.net
終わりに四郎

154:デフォルトの名無しさん (ブーイモ MM79-bVUD)
20/04/01 04:33:51 h6/hOHkqM.net
アッと驚くタメ五郎

155:デフォルトの名無しさん
20/04/01 12:55:56.84 2mAYLJyeM.net
>>151
好きだよ六郎

156:デフォルトの名無しさん
20/04/01 18:21:42.63 UG3CS4Iqd.net
ネットでこんな素晴らしい物を見つけたんだけれども、これがデータ量が多いと結構時間掛かるんだけど、高速で図形として書き出す方法って他にありませんか?

URLリンク(izawa-web.com)

157:デフォルトの名無しさん (ワッチョイ 5dce-bVUD)
20/04/01 22:01:42 4Q64PMPZ0.net
>>156
CADアプリで画像にでも変換してシートに貼り付けた方が早くて綺麗
オートシェイプに変換すると重くなるし比率が狂うし、メリットがなさすぎる

158:デフォルトの名無しさん (ワッチョイ 251f-yCYu)
20/04/01 22:28:36 kG9c2P/10.net
>>157
貼って終わりならそれでもいいんですが、数あるCADデータの中から指定のデータを呼び出してエクセルに貼り付けて線の色とか文字を取得したいんですよね。

159:デフォルトの名無しさん
20/04/01 22:54:48.05 cJ4COAhO0.net
>>145
更新時間を短くする方法は載ってなかった

160:デフォルトの名無しさん (ワッチョイ 23b5-Lkgv)
20/04/02 00:31:10 hOxCGNmI0.net
あるマクロを開いた瞬間に自作したユーザーフォームが出るようにする
それと同時にエクセルファイルを選択できる ファイルを開くウィンドウが出るようにする

ド基礎以前だと思うのですがおしえていただきたく、、

161:デフォルトの名無しさん (ワッチョイ 2ba7-9mb0)
20/04/02 00:42:40 quV7czYu0.net
ググれば全部出るのに何故ここできく

162:デフォルトの名無しさん
20/04/02 02:21:22.11 9ZVXgmel0.net
>>160
Workbook_Open()
UserForm1.Show
Application.GetOpenFilename

163:デフォルトの名無しさん
20/04/02 07:03:17.01 qQpWBHI+0.net
ド基礎以前発言がひっかかるな...
あるマクロが他人の作った編集できないマクロなら難しいね
パスワードクラックはNGで

164:デフォルトの名無しさん
20/04/02 08:01:03.55 qvprCKttr.net
少しくらいの調べる能力も持たないお子ちゃまが多い

165:デフォルトの名無しさん (ワッチョイ 1dda-bVUD)
20/04/02 10:29:10 2gPurUpa0.net
ド基礎以前のこともわからないやつに教えても理解できんだろう

166:デフォルトの名無しさん (ワッチョイ 23b5-Lkgv)
20/04/02 18:43:17 hOxCGNmI0.net
>>162
ありがとう、ネットで捜してコピペしながら頑張ってくわ

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

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

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

がんばりやす

167:デフォルトの名無しさん
20/04/02 19:19:56.56 K5yIowQc0.net
>>164
人に教えることで自分も成長する。

168:デフォルトの名無しさん (アウアウウー Sae9-f+0C)
20/04/03 02:02:50 Vs5HZC6Ua.net
成長してないやん

169:デフォルトの名無しさん (スッップ Sd43-bjOE)
20/04/03 12:51:38 EwhXV+Zid.net
>>162
そりゃ駄目だ。
モーダルとモードレスを調べよう。

モーダルでやりたかったらフォームのInitializeかActivateイベントだな。

170:デフォルトの名無しさん (スッップ Sd43-bjOE)
20/04/03 12:54:37 EwhXV+Zid.net
>>159
AutoUpdateFrequencyプロパティじゃね?
ググっただけだけど。

171:デフォルトの名無しさん (ワッチョイ e5ad-KN+/)
20/04/03 13:10:39 tVlvtk9J0.net
>>167
それはあるな

172:デフォルトの名無しさん (ワッチョイ 4bcc-bVUD)
20/04/03 13:51:03 S5/JCD2f0.net
>>170
それ、イミディエイトペインで試したけど、5未満はNGだよ

>>145の共有編集って、Excel2016で実装した、OneDriveとか使ってクラウドでやるやつだと思ったんだけど、違うのかな
×共有編集 ○共同編集 らしいけど

173:デフォルトの名無しさん
20/04/04 10:09:51.56 3Ir6pkSX0.net
モーダルあなた疲れているのよ

174:デフォルトの名無しさん
20/04/04 10:15:36.71 nxBKOFy80.net
自動更新の間隔を短くするのが無理なら手動でできないのかな?
強制的に切断と接続を繰り返してみたらどうだろう

175:デフォルトの名無しさん
20/04/04 13:14:06.10 MDQA80eK0.net
>>173
やっぱり、逆だよね

176:デフォルトの名無しさん
20/04/04 18:10:09.51 x7mbZh3f0.net
>>172
ローカルのつもりだったんだけどそれなら共同編集になるのかな?

177:デフォルトの名無しさん
20/04/05 01:47:50.77 LE/VkChT0.net
セルA1とB1の数値が一致しない場合はC1を塗りつぶす、というのはできるのでしょうか?

178:デフォルトの名無しさん
20/04/05 01:56:11.77 RR8jfU5J0.net
>>177
If A1 <> B1 Then [C1].Interior.Color = RGB(1, 234, 56)

179:デフォルトの名無しさん (ササクッテロ Sp01-xTSh)
20/04/05 07:39:22 BAT1a6hLp.net
>>178
ありがとうございます!

180:デフォルトの名無しさん (ワッチョイ 1b06-bVUD)
20/04/05 11:37:21 FbjC6ZOO0.net
A行の値を見て、その値が1だったら、空白行を上に2つ入れたいのですが、できますか。

181:デフォルトの名無しさん (ワッチョイ 1b06-bVUD)
20/04/05 11:44:06 FbjC6ZOO0.net
間違えた。

A列の値を見て、その値が1だったら、空白行を上に2つ入れたいのですが、できますか。

182:デフォルトの名無しさん (ワッチョイ 8d7c-5QI3)
20/04/05 11:59:20 Kx41qnng0.net
できます

183:デフォルトの名無しさん (ワッチョイ 5dce-bVUD)
20/04/05 12:00:45 RR8jfU5J0.net
>>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

184:デフォルトの名無しさん (ワッチョイ 1b06-bVUD)
20/04/05 12:32:03 FbjC6ZOO0.net
>>183
ありがとうございます!できました。

185:デフォルトの名無しさん (ワッチョイ 45ac-tCKN)
20/04/06 00:22:26 8R1em71p0.net
ほんまこの程度自分で考えないのかなあ

186:デフォルトの名無しさん (ワッチョイ 23ad-KBPB)
20/04/06 01:48:40 SI8CeRSt0.net
子が吐き出したcsvデータ(子の状況により1ファイル数行~数百行程度のデータ00000000.csv~FFFFFFFF.csv)を親で吸い上げて管理用に整理するマクロを作成しているのですが子のデータ数が多くなったせいか親の処理を実行中にExcelが落ちるようになりました。
現状では
Workbook.Open 00000001.csv
でファイルを開いてから配列に叩き込んで処理しているのですが、
他に何か開かずに直接配列に収納するとか別の開き方など良い手段はありますでしょうか。

187:デフォルトの名無しさん
20/04/06 02:53:22.77 mfVHo2vq0.net
>>186
その説明では落ちる原因がわからんので対処のしようがない
とりあえずテキストファイルとして開いてSplitで配列に入れるとか

188:デフォルトの名無しさん (オッペケ Sr01-WpTI)
20/04/06 07:33:50 c57grIZCr.net
>>174
自動更新しても更新されない
強制的にはできないね

189:デフォルトの名無しさん (ワッチョイ 4bcc-bVUD)
20/04/06 09:41:20 LXVfU9S30.net
>>174
最初、自前タイマーでの自動保存を提案しようと思ったけど、全ユーザーの同期とか排他処理とか必要になるからやめた
同時使用数にもよるけど、現状の5分ぐらいが実用限度だと思う
それでも問題があるから、MSも共有ブック機能を非推奨にしたんだろうしね

190:デフォルトの名無しさん
20/04/06 15:09:00.57 0mGlPNRI0.net
>>186
まず落ちる原因の特定が必要
本当にデータ量が原因かどうか?
それでもし量の問題だとしたら
同時に必要なデータを見定める
たとえばA、B、Cのファイルを同時に開いてたが
じつはAとB、BとCで処理する工夫の余地があるとか
それでもアルゴリズムではどうにもならない量なら
SQLとかのデータベースに移行する

191:デフォルトの名無しさん
20/04/06 22:35:08.05 sFf9EAmnM.net
URLリンク(oshiete.goo.ne.jp)
ActiveWorkbook.SaveAsにするとファイル名変えずに保存できる理由を教えてください
Copyした時点で別ブックが作られるんですか?

192:デフォルトの名無しさん
20/04/06 23:45:47.95 jDCeOgrg0.net
マクロで作られた印刷ボタンを押すと両面印刷で出てくるからこれを片面印刷に統一したいんだけどどうしたらいいの?

193:デフォルトの名無しさん
20/04/07 00:23:26.13 YDovvV0g0.net
>>192
マクロを書き換える
印刷方法の変更はプリンターごとに違ってて、Excelのマクロの中でも一番面倒な部分だから、会社でわかってる人に聞くのが早い

194:デフォルトの名無しさん
20/04/07 00:29:05.68 BEkwL8Dn0.net
プリンタ登録を2つに増やして使い分けるのが簡単。
でもWin95のころはコピーするだけでプリンタ増やせたけど年々難しくなるよね

195:デフォルトの名無しさん
20/04/07 00:35:40.64 8SYsQHh80.net
正直印刷は、機器変更、NW、印刷位置、紙質とかでトラブルが非常に多くなるから、
金、人命とか絶対にVBAで自動化しなければ行けない理由がない限り手動にするようにしたわ
印刷部分だけPDFにして置いておくとか

196:デフォルトの名無しさん (ワッチョイ 2ba7-9mb0)
20/04/07 01:53:49 qS+8J4U+0.net
マクロは印刷プロパティを出すところまで。
それ以上はトラブルの原因になるからやめとき

197:デフォルトの名無しさん
20/04/07 04:36:48.84 hIwtKFus0.net
そもそも紙にこだわるのが非効率で
電子化するのが本来の理想ではある

198:デフォルトの名無しさん (ワッチョイ 233e-g9A3)
20/04/07 07:13:41 xwPFl55C0.net
プリンタのプロパティでプリンタの設定自体を片面印刷にしておくと片面印刷になりますか?

199:デフォルトの名無しさん (ワッチョイ 4d8e-jJEW)
20/04/07 08:07:09 YQg5kUpF0.net
そのくらい自分でやって試せよ

200:デフォルトの名無しさん (スッップ Sd43-bjOE)
20/04/07 08:07:32 FCg3JG5md.net
>>186
CSVをWorkbook.Openで開くのが駄目。
OpenステートメントとかFileSystemObject使う方が良い。

201:デフォルトの名無しさん (ワッチョイ 2342-uUuo)
20/04/07 09:12:43 +6IcJjJU0.net
>>197
そんなの職場や利用目的によりけりだから

202:デフォルトの名無しさん
20/04/07 12:34:06.90 y7/AcPOrM.net
コントロールパネルからプリンタのプロパティで片面印刷に設定したんだけど片面印刷オンリーになりません
どうしたらいいですか?

203:デフォルトの名無しさん
20/04/07 12:42:21.74 RfysvMTgr.net
やったこと全部書き出してプリンターメーカーに聞け

204:デフォルトの名無しさん (ワッチョイ b501-tb4t)
20/04/07 15:41:03 AQdBAJYM0.net
特定の文字列のみ文字色を変えたいんだけど、
置換を使うと指定した文字列を含むセルに入力されている全ての文字の色が変わってしまう…

現状では数百数千セルある中から文字列を選択して文字色変更を繰り返す、という辛い作業を続けているのですが
この様に、指定した文字列だけの色を変更って出来ませんか?

205:デフォルトの名無しさん
20/04/07 17:49:52.17 yHbrhPie0.net
>>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

206:デフォルトの名無しさん
20/04/07 19:26:33.02 FCg3JG5md.net
>>205
何か少し違う気がする。
rの中で対象文字列が1回しか変わらないんじゃね?
s=instr(s+1,r.Value,対象文字列)でsが0になるまでループかな?

207:デフォルトの名無しさん
20/04/07 19:29:30.91 ZYiBkzsm0.net
何から覚えようVBA

208:デフォルトの名無しさん
20/04/07 19:42:05.21 F7VfxkGZ0.net
>>198
やってみてどうなった?

209:デフォルトの名無しさん
20/04/07 20:04:27.93 4wIwYA/Ra.net
>>207
覚えるのが目的じゃなかろう

210:デフォルトの名無しさん (ワッチョイ 23ad-KBPB)
20/04/07 20:22:06 83dL758F0.net
>>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)

211:デフォルトの名無しさん (ワッチョイ 5dce-bVUD)
20/04/07 21:04:34 YDovvV0g0.net
Windows10になってから、アプリごとに印刷設定を覚えるようになってややこしくなった
以前はプリンタのプロパティからデフォルト状態を決め打ちできたのに

212:デフォルトの名無しさん
20/04/07 22:46:04.39 yHbrhPie0.net
>>206
その辺は仕様がはっきりしないから何とも言えんし
そもそも丸投げを受けたつもりはない
s+1だとaaaaaにたいしてaa指定したら5文字全部色変わるけどそれが良いのかどうかわからんだろ

213:デフォルトの名無しさん (ワッチョイ e202-slfm)
20/04/08 03:24:16 PBw6emZJ0.net
4文字目から3文字赤に変えたマクロの記録
ActiveCell.Characters(Start:=4, Length:=3).Font.ColorIndex = 3

214:デフォルトの名無しさん
20/04/08 19:41:01.55 uS6fz3VF0.net
まさかシート毎に印刷の画面から片面印刷を選ばなきゃ両面印刷をされるなんて知らなかったわ

215:デフォルトの名無しさん
20/04/08 19:55:07.25 o5xrKhXHa.net
プリンター関係の情報はシートごとになってるから。
手動ですべてのシートを両面印刷にする方法はあるけど。

216:デフォルトの名無しさん
20/04/08 20:05:36.79 T31Wtd0td.net
シート全選択してプリンタ設定変更してからやればいい

217:デフォルトの名無しさん
20/04/08 20:16:40.48 o5xrKhXHa.net
シート全選択してプリンター設定してもダメなんですよね。

218:デフォルトの名無しさん (アウアウウー Sabb-Fqhg)
20/04/08 20:32:27 wSF4QqHVa.net
あきらめろん

219:デフォルトの名無しさん (スププ Sd02-bmmP)
20/04/08 20:37:06 T31Wtd0td.net
>>217
上書き保存してファイルを開き直せ

220:デフォルトの名無しさん (ワッチョイ f71f-nfbJ)
20/04/08 22:17:54 Tninom9X0.net
dwgファイルをどうにかしてEXCELに図形で取り込みたいんだがなんか方法ありません?
家の見取り図みたいなファイルなんだけど。

221:デフォルトの名無しさん (ワッチョイ 43ce-AglQ)
20/04/08 23:34:26 W1XPdmgi0.net
>>220
DXFに変換

222:デフォルトの名無しさん
20/04/09 03:10:49.06 lF+KAcZx0.net
>>220
後輩にやらせる

223:デフォルトの名無しさん
20/04/09 04:58:57.51 yf4TGzZj0.net
>>220
JacConvert

224:デフォルトの名無しさん (オッペケ Sr5f-5Z7F)
20/04/09 07:53:04 q52/CIa+r.net
セル右クリックしたら出てくるメニューを禁止に出来ない?
書式設定とかコピーとか貼り付けとかメニュー自体出ないように

225:デフォルトの名無しさん (スップ Sd22-ELgU)
20/04/09 07:57:33 YKVVyHYsd.net
>>224
サブクラスで出来るかどうか。
ここには答えられる程の上級者が居ないと思う。

226:デフォルトの名無しさん
20/04/09 08:14:30.62 44A41Mtl0.net
保護かければ?

227:デフォルトの名無しさん
20/04/09 08:18:29.24 q52/CIa+r.net
>>226
保護かけると使えなくなる機能があるから無理なんだ

228:デフォルトの名無しさん
20/04/09 08:39:31.78 K8984GmW0.net
これは?普通にググったら出てきたぞ
URLリンク(www.moug.net)

229:デフォルトの名無しさん
20/04/09 09:20:01.56 x5VgstST0.net
普通にやり方あるぞ

230:デフォルトの名無しさん (ササクッテロラ Sp5f-zMEH)
20/04/09 12:24:02 wcbpQmosp.net
エクセル2007についてです

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

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

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

この場合のカレンダーから日付取得をするというのはできないのでしょうか?

231:デフォルトの名無しさん
20/04/09 12:30:31.66 8gmsr/Td0.net
>>230
ボタンを横7列、縦6つ並べたカレンダーコントロール的なフォームを自作すればいい
URLリンク(ateitexe.com)

232:デフォルトの名無しさん
20/04/09 12:31:40.44 veSARJt1M.net
カレンダーのシートを作って、そこから選択させるとか

233:デフォルトの名無しさん
20/04/09 13:01:14.59 wcbpQmosp.net
>>231
早速参考にさせていただきました
ありがとうございます
ただ、これ起動すると、日付クリックした後、テキストボックスに日付挿入になるので
どこかのコードにテキストボックスではなくてセル挿入になるようにしたらいいと思うんですけれど、どこに記述するのがいいですかね?
まだvbaいじり始めた身としてはここまで複雑だといじりづらいというか

234:デフォルトの名無しさん
20/04/09 20:27:14.43 PvaeZ0Ck0.net
>>224
BeforeRightClickイベント

235:デフォルトの名無しさん (ワッチョイ f71f-nfbJ)
20/04/09 21:58:32 TQ3Lwxfd0.net
>>221
調べるとDXFはTextファイル形式で出来ているみたいでネットで調べながらやってみたけど、重い。まぁ俺の書き方が駄目な気もするけど。線の数が4万とか超えてる。

236:デフォルトの名無しさん
20/04/09 23:05:01.47 vJBq1mcg0.net
作者不明のファイルを修正しているのですが、そのファイル自身を指定するのにファイル名で
記述してありました。これだと「●●Ver1.0.xlsm」→「●●Ver1.1.xlsm」のようにファイル名を
変える度にコードを修正しなくてはならないためThisWorkBookに変えようかと思っているのですが
その場合なにか弊害とかあるんでしょうか?

237:デフォルトの名無しさん (ワッチョイ e23e-1Ne1)
20/04/10 07:51:15 goOf5Ofq0.net
シートを全選択したら一括で変更できるのか

238:デフォルトの名無しさん (オッペケ Sr5f-vH9a)
20/04/10 08:26:28 tq9uLSTsr.net
>>236
弊害は無いよ

239:デフォルトの名無しさん (オッペケ Sr5f-q7V1)
20/04/10 09:37:44 Rte1PrgOr.net
そのファイル自身だと完全に明確で揺らがないなら、thisworkbookでいんじゃね

240:デフォルトの名無しさん (ワッチョイ c6da-AglQ)
20/04/10 19:23:44 LG9l2UEQ0.net
どこから参照されてるのか全部調べないとわからないんじゃないかそれ。
まあThisworkbookを知らないだけの可能性は高いが。

241:デフォルトの名無しさん (ワッチョイ eb5e-AglQ)
20/04/10 19:27:26 f64Irgef0.net
>>238,239
ありがとうございます。

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

今日は時間がなくて試せなかったのですが、この場合でもマクロが記述されたブックはA.xlsmなので
ThisWorkBookで問題ないかなと思ったのですが、それであっていますでしょうか?

242:デフォルトの名無しさん (ワッチョイ eb5e-AglQ)
20/04/10 19:38:53 f64Irgef0.net
>>240
ThisWorkBookを知らないというかちゃんと理解していないのはその通りだと思います。
ThisWorkBookの主体がが変わる場合があるということでしょうか?
マクロ実行中にほかのブックに記述されたマクロを利用したりすると変わる、とかですかね?

243:デフォルトの名無しさん (ワッチョイ 62ad-JJvI)
20/04/10 20:30:11 oDKSQVIR0.net
ThisWorkBookはプログラムが記述されているワークブックを参照せよっていう意味だからブックAを実行中にアクティブがブックBに切り替わったりしてもブックAに記述されたThisWorkBookはブックAを参照する

244:デフォルトの名無しさん
20/04/11 03:52:15.33 w8fV8nev0.net
エクセルテンプレートを開いた状態

フォルダにある1つ目のtxtデータをエクセルテンプレにドラッグしてエクセル化

エクセル化したC1:C8の範囲をコピー

元々開いてあるエクセルのA1:A8に「数値」のみ貼り付け

エクセル化されたデータは閉じて2つ目のtxtをドラッグしてエクセル化

C1:C8の範囲をコピーしてテンプレのB1:B8に「数値」のみコピー
って感じでテンプレに測定機から出したデータをひたすら貼ってるんですが
これを簡単にするVBAとか可能ですか?
人によってはテキストをエクセル化はまとめて5つドラッグしたりして順番に貼ってく人もいます
エクセル化したデータの数値のみコピーしたいセルはC1:C8は固定
テンプレにはABCDと順番に貼って増やしていく
これをなんとかマクロかする案があればご教授お願いします。

245:デフォルトの名無しさん (ワッチョイ 4f5f-791I)
20/04/11 07:25:04 +FpWMQNh0.net
可能です。

246:デフォルトの名無しさん
20/04/11 08:08:50.84 X9U6v4B00.net
テンプレート(.xlt .xltx)は何に使うの?

247:デフォルトの名無しさん (ワッチョイ e2b5-G6fV)
20/04/11 10:50:20 w8fV8nev0.net
>>245
その一言でも希望があってありがたい
どういう流れで作ったらいいか何か構想のヒントなどあればいただきたいです

・テンプレのエクセルにボタン設置
・テンプレ開くと同時にユーザーフォーム開くようにしてテキスト選択できるようにするのか
・そもそもVBAがまだ人間になれてない猿並のスキル


>>246
テンプレは.xlsxです、普通のエクセルの

248:デフォルトの名無しさん (アウアウエー Sa3a-d4/r)
20/04/11 10:56:04 DIdffniea.net
>>244
txtデータは、例えばカンマで区切られてるとか、空白で区切られてるとか、決まってるの?
内容的にはVBAがある程度使える人なら難しくないと思うけど、ちょっとネットで聞いて作ろうとかいうのは難しいんじゃないかな。

249:248
20/04/11 11:19:08.65 DIdffniea.net
txtファイルがどのくらいの数あるのかで、どういう手順が良いか違ってくると思います。
そんなにたくさんないなら、テンプレファイル(◯◯.xlsm )に、ボタンを用意。ボタンを押したらファイルを選択するダイアログが出て、該当のtxtファイルを選択してデータを読み込む。
txtファイルがたくさんあるとこの手順は面倒なので、同一フォルダに入れてなんらかの順番で読み込むようにするとか。

250:デフォルトの名無しさん
20/04/11 11:27:54.59 YvJJVii7M.net
>>248
そこら辺の知識がなくてとにかくテキストを、開いてるエクセルにドラッグすると決まったセル範囲に例えばC1:C5に欲しいデータが出るのでそれをコピーしてるのが現状です
イメージ的にいつも
URLリンク(i.imgur.com)
テキスト入ったフォルダとエクセルを並べる

URLリンク(i.imgur.com) 
ドラッグしてエクセル化

URLリンク(i.imgur.com)
数値のみコピーしてテンプレに貼り付け

URLリンク(i.imgur.com)
閉じた後、次のテキストをドラッグしてエクセル化

URLリンク(i.imgur.com)
テンプレの次の列に貼り付け
これを日によっては70くらいやったりしてます、、

251:デフォルトの名無しさん
20/04/11 11:31:26.34 YvJJVii7M.net
>>249
レスありがとです!!!そこです!
日によってデータ数が違って
5つの日もあれば30の日もあれば75の日もあります
ボタン作って該当するデータの数を任意で選べたりできないのかなぁと妄想してます

252:デフォルトの名無しさん
20/04/11 11:41:57.94 YvJJVii7M.net
この貼り付けるエクセルはそもそもこんなのでテンプレなの?っていうは一応エクセルの関数で
他の何種類もあるシートに複数の関数で出せる紐付けしてあるので
テンプレというか自分なりのベースのようなものです
本当はその関数すら慣れてる人ならVBAで余裕で組むんだろうなと思うのですがそんな欲ばる資格がまだないのでまずはこの作業を…

253:デフォルトの名無しさん
20/04/11 11:45:20.84 DIdffniea.net
GetOpenFilenameメソッドでダイアログで複数のtxtファイルを選択するか、「転記前フォルダ」とかに対象のtxtファイル入れておいて、フォルダ内をfor eachですべて読み込むか。読み込み済みのtxtは自動で「転記済フォルダ」に入れるか削除。
どちらにしてもtxtファイルの名前順に読み込むようになるだろうから、そこを一工夫する必要があるかも。

254:デフォルトの名無しさん
20/04/11 12:37:41.59 9V4Tv9yv0.net
>>252
とりあえず、フォルダ内の全テキストを一気に読み込むやつを作った
専用のフォルダに必要なデータだけ入れて、フォルダ名を2行目に書いて
Sub Macro1()
  ChDir "c:\tmp"
  f = Dir("*.txt")
  c = 1
  Do While f <> ""
    Open f For Input As #1
    For r = 1 To 6
      Line Input #1, s
      Cells(r, c) = Split(s, vbTab)(2)
    Next
    Close #1
    f = Dir
    c = c + 1
  Loop
End Sub

255:デフォルトの名無しさん
20/04/11 12:48:46.57 7ipBnOPU0.net
>>247
マクロ記録してそれを加工すればいい

256:デフォルトの名無しさん
20/04/11 12:55:48.43 Zf+aIjAZ0.net
>>254
うおおおお
マジでありがとうございます!
いま外出中なので帰ったら速攻でVBE開いて取りかかります!!
他のこんな猿にアドバイスくれる人達に感謝のみ
批判されて当然のスキルしかないのでそういう覚悟もして相談させてもらってます
6月くらいまでには形にして自分もある程度
コードのルールや流れを猛勉強します
>>255
それも頑張ります、まず加工する知能を身につけます

257:デフォルトの名無しさん (アウアウウー Sabb-Fqhg)
20/04/11 18:21:57 jjkr4EqGa.net
個人的にはCHDIRと#1ってのが
気になった

258:デフォルトの名無しさん
20/04/11 20:11:07.53 Lp6A5Woc0.net
恋だな

259:デフォルトの名無しさん
20/04/11 20:18:04.56 7YQkqL610.net
6月て
こんなんIT系の仕事じゃなくても普通に1日で理解するやろ。。
多分セルごとに書き込むからファイル数とデータによっては遅くなるな

260:デフォルトの名無しさん
20/04/11 21:02:43.27 Mh4soJ8e0.net
クリップボードに整形したデータ入れてペーストでもいいのよ
タブで右のセル
改行で次の行

261:デフォルトの名無しさん (ワッチョイ c28b-KRXG)
20/04/12 05:51:52 2Kcsozov0.net
VBAについて詳しい方に質問です。
現在VBAでオートフィルタの自動プログラムを組んでいます。
そこで質問があります。以下の様なデータがあったとします。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
私の名前は、太郎です。
私の名前は、岩崎です。
あなたの名前は、太郎です。
あなたの名前は、岩崎です。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
検索ワードとしてスペース区切りで「あなた 太郎」と入力された場合
「あなた」と「太郎」を同時に含む行のみをフィルタリングするには
どういう記述を Criteriaにすれば良いのでしょうか?

Criteria1:="*" & [検索ワード] & "*"

現在こんな感じで記述してますがうまく動きません。
AND条件、そしてOR条件で指定する方法を教えてくださいm(_)m

262:デフォルトの名無しさん (ワッチョイ c6da-AglQ)
20/04/12 08:05:06 YDpAYAt+0.net
>>261
それやるならオートフィルタじゃない。
アドバンスフィルタ。

263:デフォルトの名無しさん (ワッチョイ bb7c-slfm)
20/04/12 11:41:12 QKHzDSq80.net
>>261
シート上でオートフィルタかける時にできること以外のことはできない

264:デフォルトの名無しさん (ワッチョイ bb7c-slfm)
20/04/12 11:45:08 QKHzDSq80.net
どうしてもその記述でやりたいならワードをスペースで分割してから条件2つ指定する

265:デフォルトの名無しさん
20/04/12 13:12:18.32 2Kcsozov0.net
ありがとうございます。
アドバンスフィルタとやらを調べてみます。

266:デフォルトの名無しさん
20/04/12 13:17:20.10 bBYC6g030.net
>>261
And条件の場合はこう書く
Criteria1:="=*あなた*", Operator:=xlAnd, Criteria2:="=*太郎*"

267:デフォルトの名無しさん
20/04/12 13:39:43.30 2Kcsozov0.net
>>266
ありがとうございます!!

268:デフォルトの名無しさん
20/04/12 17:59:57.23 Vvo4XdlE0.net
いえいえ

269:デフォルトの名無しさん (ワッチョイ e2b5-L0r9)
20/04/13 01:44:02 sGzWGZEv0.net
>>254
これを、やってみたけどcellsのところでエラーがでます、うーん
頑張ります

270:デフォルトの名無しさん (ワッチョイ 4f5f-791I)
20/04/13 07:29:10 aaxqX2kx0.net
>>269
ヒント 変数 r

271:デフォルトの名無しさん (ブーイモ MM5b-qE1F)
20/04/13 08:13:39 q00oGNOiM.net
>ヒント
ウザっ

272:デフォルトの名無しさん (ワッチョイ 43ce-AglQ)
20/04/13 11:51:14 V+m1zN0B0.net
>>269
それはたぶん、txtファイルの中身が想定外
例えば5行以下しかないか、C列にデータが入ってないか

273:270
20/04/13 12:54:16.85 RFtb5de7M.net
>>269
すまん。変数 r はforで回ってた。

274:デフォルトの名無しさん
20/04/13 13:27:32.03 kcz/TGUB0.net
S列の2行目以降で、0.05以上でかつ、0.98以下の値の行を行ごと削除したいのですが、コードを教えてください
(最終行はA列から取得)
Dim tag As Variant
Dim a As Long
tag = Range("S1:S" & Cells(Rows.Count, 19).End(xlUp).Row).Value
For a = Cells(Rows.Count, 19).End(xlUp).Row To 2 Step -1
If tag(a, 19) <= 0.98 And tag(a, 19) >= 0.05 Then
Rows(a).Delete
End If
Next

275:デフォルトの名無しさん
20/04/13 14:19:37.44 V+m1zN0B0.net
>>274
Dim a As Long
For a = Cells(Rows.Count, 1).End(xlUp).Row To 2 Step -1
  If 0.05 <= Cells(a, 19) And Cells(a, 19) <= 0.98 Then
    Rows(a).Delete
  End If
Next

276:デフォルトの名無しさん
20/04/13 14:20:29.76 6KK4qS560.net
ワークシート機能とか使わないなら、
・その表を全て一気にもにょっと2次元配列(tableA)にいれる(コンマ数秒)
・2次元配列(tableB)を一旦定義
・tableAの各行(イメージね)をforeachする。++カウントする変数をつくる。これはtableBの行数。
・foreachのなかで、tableAのS列がその条件に合致しなければ、tableBに行のそれぞれの要素を代入する(redim preserveしながら)
・できたtableBをどこかにペタッと貼る
Excelぽくやるなら
・オートフィルタする
・2次元配列に一旦もにょっとコピーする(可視セルのみ、CurrentRegionかな)
・シートをクリアするか他のシートにコピーした2次元配列をペタっと貼る

277:デフォルトの名無しさん
20/04/13 14:21:50.93 6KK4qS560.net
ちなみに行をforeachしながら行を消すとズレが生じるんじゃね、しらんが

278:デフォルトの名無しさん
20/04/13 16:10:06.75 7RR5m+brM.net
>>254
色々いじっていますがこれをどう手直ししていいかわからず…
たとえばこれをテキストを変換したときにF2:F13にくるデータを
エクセルにはB5:B16、C5:C16と順番になるよるに出力するようになるにはどう調整すればいいのか、がんばって調べてます

279:274
20/04/13 16:10:57.06 kcz/TGUB0.net
>>275
ありがとうございます。

280:デフォルトの名無しさん (ラクッペペ MM8e-CJtn)
20/04/13 18:33:52 xh/6KDMeM.net
>>278
ヒント: F1キー

281:デフォルトの名無しさん (ワッチョイ e2b5-G6fV)
20/04/13 19:37:09 sGzWGZEv0.net
Sub テキストから引っ張る()
ChDir "C:\Users\user\Desktop\マクロ勉強" 'フォルダ指定
f = Dir("*.txt")
c = 2 'テンプレの開始する列の変更
Do While f <> ""
Open f For Input As #1 For r = 2 To 13
'テキストの引っ張ってくる行を指定
Line Input #1, s Cells(r, c) = Split(s, vbTab)(2) Next Close #1 f = Dir c = c + 1 Loop End Sub


猿には荷が重すぎるわ
せっかくここで凄いの貰ったのに頭が。
テキストをエクセル化したときのC列をF列に変更しようと思ったらすでにfが存在してて
どこを今度は変えたらいいかわかりません

282:デフォルトの名無しさん
20/04/13 19:44:03.37 V+m1zN0B0.net
>>281
cとかfは変数だよ
ワークシートの列じゃない

283:デフォルトの名無しさん
20/04/13 19:48:23.00 V6BYDDPb0.net
猿とか以前にそもそも基本知識すら身に付けてないのでは…

284:デフォルトの名無しさん
20/04/13 19:54:15.29 sGzWGZEv0.net
そう、変数なんだというとこまではぎりぎり何とかわかったんです
ただ、引っ張ってくるテキスト側の列をどこで制御してるのかがわからず
>>283
完全にその通り
単純に勉強不足
ネットでかじってばかりじゃダメだと古いけど本も借りました
ただ本当にマジで難しい…
URLリンク(i.imgur.com)

285:デフォルトの名無しさん
20/04/13 19:55:45.77 V+m1zN0B0.net
Sub テキストから引っ張る()
  Dim ファイル名 As String
  Dim 行 As Integer
  Dim 列 As Integer
  Dim 配列() As String
  Dim 文字列 As String
  ChDir "C:\Users\user\Desktop\マクロ勉強"  ' フォルダ指定
  ファイル名 = Dir("*.txt")
  列 = 2 'テンプレの開始する列の変更
  Do While ファイル名 <> ""
    Open ファイル名 For Input As #1
    For 行 = 2 To 13  ' テキストの引っ張ってくる行を指定
      Line Input #1, 文字列
      配列 = Split(文字列, vbTab)
      Cells(行, 列) = 配列(2)
    Next
    Close #1
    ファイル名 = Dir()
    列 = 列 + 1
  Loop
End Sub

286:デフォルトの名無しさん (ワッチョイ e2b5-G6fV)
20/04/13 19:58:56 sGzWGZEv0.net
うお、変数の宣言をあらかじめわかりやすくしてくれて馬鹿な俺を誘導してくれようとする人が!!絶対そんな感じのありがたい人だ!
今から車に乗って帰ったら速攻PC開きます!--!!

287:デフォルトの名無しさん
20/04/13 20:19:57.09 Kp4LtUp30.net
>>281
>>284
まずVBAの入門書を読んで基礎知識を
整理するといい(するみたいだけど)
あと「テキストから引っ張る」っていう言葉が曖昧
「テキストファイルを読み込む」「セルに展開する」
みたいに仕様を適切な言葉で把握しておくだけで
ネットで検索すればすぐサンプルコードが引っかかる
本当はなるべく「f」も「file」とか具体的に
命名した方が分かりやすくていいと思うけど
(ファイル用変数とセルの列を混同した一因だろうし)
まず日本語のレベルで言葉を整理しよう

288:デフォルトの名無しさん
20/04/13 22:05:23.75 sGzWGZEv0.net
>>287
全くその通りです。
とりあえず
ほぼ意味わからないまま上の人達のおかげで自分の今の業務が10倍以上余裕で速くなるであろうマクロボタンをベースになるxlsmのシートに一つ登録したらたった今完成してしまいました…
隣のシートの正式フォームに数値のみコピーするのだけはマクロで追加しました

Sub テキストファイルをベースに読み込む() ChDir "C:\Users\ikuzo\Desktop\測定データ"
'フォルダ指定
FILE = Dir("*.txt")
c = 2
'ベースの開始する列の変更
Do While FILE <> ""
Open FILE For Input As #1 For r = 2 To 13
'セルに展開する行を指定
Line Input #1, s Cells(r, c) = Split(s, vbTab)(5) Next Close #1
FILE = Dir
c = c + 1
Loop
Range("B2:L13").Select Selection.Copy Sheets("測定結果報告書").Select Range("D5:N16").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False
End Sub
何度やっても一瞬で完璧に処理が終わる…
だがさっぱり意味がわからん、、
本読みます。。

289:デフォルトの名無しさん (ワッチョイ e2b5-G6fV)
20/04/13 22:52:20 sGzWGZEv0.net
ああ、ダメだ。'でメモりまくったけど
出力する側のエクセルシートの列の指定はわかったけど行の指定がわからなかった。勉強ですね。。
みなさんありがとうございました。

290:デフォルトの名無しさん
20/04/13 23:09:41.81 nLvmNP810.net
ちらっちらっ

291:デフォルトの名無しさん
20/04/13 23:14:07.84 sGzWGZEv0.net
ごめん、ダメだ。助けてください。
混乱しまくってます。全然違った
読み込むテキスト側の行指定がわからない、、
ベースの方にテキスト2行目8行目からを指示、
とかそれをしないと会社で対応できないです…

292:デフォルトの名無しさん
20/04/13 23:21:22.07 V6BYDDPb0.net
そりゃ変数すら知らない知識レベルならこんな短時間じゃなんもできんだろう…

293:デフォルトの名無しさん (ワッチョイ e2b5-G6fV)
20/04/13 23:39:16 sGzWGZEv0.net
先輩曰くとりあえずわからなくても1つ何か作ってそっから覚えていけと言われ…

Sub 指定フォルダの全テキスト絞り読み込み() ChDir "C:\Users\user\Desktop\測定機データ" 'フォルダ指定
FILE = Dir("*.txt") retu = 2
'ベース列決定でAは1から
Do While FILE <> ""
Open FILE For Input As #1
For Tekist = 3 To 12
'ベース任意行決めでテキストは1行目から
Line Input #1, s
Cells(Tekist, retu) = Split(s, vbTab)(5)
'テキスト初列を()で決めるがAは0から
Next
Close #1
FILE = Dir retu = retu + 1
'この数だけ列飛ばしにベースに読み込む
Loop
End Sub

'テキストを任意の行から読むのが課題4月13日

毎日勉強しないとなぁ。ほんと

294:デフォルトの名無しさん (ワッチョイ f71f-nfbJ)
20/04/13 23:57:52 k2GojJ+U0.net
PDFファイル(画像)をEXCELに貼り付ける際の画像の素の大きさってどうやって取得できます?

295:デフォルトの名無しさん
20/04/14 00:02:13.22 A2P11e7ma.net
いきなり別ファイル(txtファイル)読み込んだり、配列変数あったりで難しいよ。
本来はもっと基礎からやらないと。

296:デフォルトの名無しさん
20/04/14 00:02:49.64 PthiGcDI0.net
>>293
テキストファイルは1行ずつ順番しか読み込むことができないから、3行目が必要な時は最初の2行を読み飛ばさないといけない
Open FILE For Input As #1
Line Input #1, s ' 1行目を読み込むだけで何も処理をしない
Line Input #1, s ' 2行目以下略
For Tekist = 3 To 12
  Line Input #1, s ' 3行目以降
  Cells(Tekist, retu) = Split(s, vbTab)(5)
Next

297:デフォルトの名無しさん (ワッチョイ e2b5-G6fV)
20/04/14 00:29:53 Ua5gdcz00.net
>>296
本当に本当にありがとう、
上の人たちも本当にありがとう
無知のド素人の俺でも超完璧に動かせました
感謝しかないです。本当に勉強します


Sub 指定フォルダの全テキスト絞り読み込み() ChDir "C:\Users\ikuzo\Desktop\測定機"
'フォルダ指定
FILE = Dir("*.txt")
retu = 2  'ベース列を決定でAは1から
Do While FILE <> ""
Open FILE For Input As #1
'Line Input #1, s   
' 1行目を読むだけで何もしない(テキスト1行目からで良ければ普段は封印
'Line Input #1, s   
' 2行目以下略
For Tekist = 3 To 12
'ベース初行~任意行決めでテキストは1行目からだが封印の解放により連動
Line Input #1, s
Cells(Tekist, retu) = Split(s, vbTab)(5)
'テキスト初列を()で決めるがAは0から
Next
Close #1 FILE = Dir retu = retu + 1
'この数字を変えた分だけ列飛ばしにベースに読み込む 
Loop
End Sub

'本当にありがとうございました4月14日

298:デフォルトの名無しさん
20/04/14 16:20:04.61 BhIp9WlU0.net
>>296
Tekist ワロタ

299:デフォルトの名無しさん (スップ Sd02-AglQ)
20/04/14 18:14:44 srMYTcHJd.net
TekisutoでもTextでもTexteでもないのな

300:デフォルトの名無しさん
20/04/14 19:13:19.46 Ua5gdcz00.net
今日、神懸かり的に職場の測定機のPCのツールとして産声を上げました
あとは起動と同時に出るユーザーフォームにボタン4くぐらい作って割り当ててとりあえず完成しそうです
そして今日から本を愛読して変数について基礎から学んできます
自分で変えたのがわかるように誤記ぐらいにしとかないと何かのコマンドやコードがわからないので
textって打ったら先頭が大文字に変わるから
こりゃいかんと

301:デフォルトの名無しさん (ワッチョイ bb7c-slfm)
20/04/14 19:29:23 2/fcFDaL0.net
なんでもいいから一つ作れってのは作ってもらえって意味じゃないと思うな

302:デフォルトの名無しさん (ブーイモ MM5b-L0r9)
20/04/14 19:39:44 5O9c120iM.net
活気が出てええやん
過疎スレやし

303:デフォルトの名無しさん
20/04/14 21:50:12.98 Ua5gdcz00.net
変数の定義や宣言をとにかく最初にする癖をつければ
後でわかりやすいことが本でわかり
そして英字じゃなくてもいいことに驚きました
慣れてるたち人のサイトだと
Dim Folderpass As String
Dim FileInt As Long
とか英字だけど
Dim フォルダ場所 As String
Dim ファイル数 As Long
とか和文字だと支障でますかねこれ

304:デフォルトの名無しさん (アウアウエー Sa3a-d4/r)
20/04/14 21:58:17 A2P11e7ma.net
個人的には変数名で日本語は避けてる。
逆に読みにくいので。

305:デフォルトの名無しさん (ワッチョイ 23da-AglQ)
20/04/14 22:06:22 4z3IdTPt0.net
拙者も日本語はコメントで書くようにしてコードは英数字で書くようにしている

306:デフォルトの名無しさん
20/04/14 22:20:28.98 Ua5gdcz00.net
なるほど、俺も英字で作る癖つけた方が良さそうですかね
字の色でわかるだろ…とは言え、なんかの関数やコマンドと似てるとやはり最初は難しいですね
Tekist
Fname
Fpass
shseeet
とかにしてこれ俺の宣言した変数だわ
って最初は作ってみます
あざす!

307:デフォルトの名無しさん (アウアウエー Sa3a-d4/r)
20/04/14 22:37:22 A2P11e7ma.net
変数の付け方とかで、書いた人の実力が分かるという説もあるから。
私は小文字で始めるキャメル式が見やすいと思って大体統一してる。

308:今度はビルドとはとか言い出すんだろうか? (ドコグロ MMaf-Y19k)
20/04/14 22:38:37 e6NkXt+SM.net
> とか和文字だと支障でますかねこれ
今時C/C++ですら変数名に漢字使えたりするぐらいだから問題ない
特にフォルダーパスをFolderpassとか書くような人は積極的に使うべき

309:デフォルトの名無しさん
20/04/14 22:53:49.36 PthiGcDI0.net
VBAだとそんなに困ることはないんだけど、.netはライブラリが膨大すぎて、既存のメソッドやプロパティと名前が被るかどうかの確認が面倒
あと、語彙力が足りなくてユニークな英単語が思いつかないとか、辞書で調べて付けた変数名があとから見返すと意味がわからないとかある

310:デフォルトの名無しさん
20/04/14 23:05:59.10 wBIN668P0.net
>>309
>語彙力が足りなくてユニークな英単語が思いつかないとか
曜日、曜日って英語でなんて言ったかなー
せや、yb ですましたら

311:デフォルトの名無しさん (ワッチョイ f709-zfCe)
20/04/14 23:20:30 1uq460ot0.net
最近プログラム自体始めた初心者です。
日々勉強ばかりですので、汎用性が高くなるよう目指し、
知識を入れてはコードを改良し、それを外部保存、そして
実行するブックで呼び出して使っています。

ついこないだ引数という便利なものを知り、さっそく使っているのですが、
ひとつ疑問が。
「特定セルに、作成したリストの上から順に内容を書き込む」という
簡単なfor~nextループマクロを使いまわしたいのですが、そのループ処理内容を
callなどから設定することはできるのでしょうか?
(たとえば、あるブックでは印刷処理したい、けどこっちではシートコピー処理したい、
など)

引数で、特定セルやリストの開始行は設定できたのですが。。。
宜しくお願いいたします。

312:デフォルトの名無しさん
20/04/14 23:23:30.52 1uq460ot0.net
>>311です。一部分かりづらかったので訂正いたします。
×「そのループ処理内容をcallなどから設定することは~」
〇「そのループ処理内容を、実行するブックから設定することは~」

313:デフォルトの名無しさん
20/04/14 23:30:42.95 ps8T64zC0.net
馬鹿が一気に出てきたのはコロナウイルスで脳炎や痴呆症でも発症するのか?

314:デフォルトの名無しさん
20/04/14 23:31:29.82 PthiGcDI0.net
>>311
サブルーチンの中にブック名を判定するIfを入れるとか、引数を増やして処理を切り替えるとか、方法はいくつもある

315:デフォルトの名無しさん (ワッチョイ e2b5-G6fV)
20/04/14 23:44:19 Ua5gdcz00.net
Sub データ数の確認()
Dim FoPath As String
Dim Fname As String
Dim Fnum As Long
Dim SetPath As String FoPath = "C:\Users\user\Desktop\測定機"
'フォルダのパスを指定する
Fname = "*.txt" 'ファイル名と拡張子指定 Fnum = 0
'ファイル数を一度0にする
'指定したフォルダパスとファイル名をセット
SetPath = Dir(FoPath & "\" & Fname)
Do While SetPath <> ""
'ファイル名が取得出来なくなるまでループ Fnum = Fnum + 1
SetPath = Dir()
Loop
MsgBox Fnum & "つデータが入っています。"
End Sub


見様見真似というかネットからパクってユーザーフォームのボタンに追加できました。
このスレの人たち凄いです

316:デフォルトの名無しさん (ワッチョイ 068e-f9/D)
20/04/14 23:55:34 ps8T64zC0.net
いい加減に馬鹿は消えろ

317:デフォルトの名無しさん (ラクッペペ MM8f-AKYr)
20/04/15 00:06:27 IBkk3oxvM.net
>>311
他のナウい言語みたいに関数ポインタとか使いたいのだろうが
おとなしくコマンド文字列でも渡してselectでもしとけ

318:デフォルトの名無しさん
20/04/15 01:14:25.80 vPyadW120.net
ナウい変数名を考えようと思って色々試したら、結構いけるじゃん。
Dim ヽ, 卍, ¶, ㍾, ㌶, ㊨, ℡, ≒, ♪
♪ = 1
Debug.Print ♪

319:デフォルトの名無しさん
20/04/15 01:17:01.85 vPyadW120.net
あ、普通にこれでいいか。
Dim 骸骨剣士, 死霊の騎士, 幽霊, 死神

320:デフォルトの名無しさん (ワッチョイ 77ce-Ho7r)
20/04/15 01:24:08 Ikiffowr0.net
For 愛 = 1 To 10

321:デフォルトの名無しさん (ワッチョイ 77ce-Ho7r)
20/04/15 01:34:17 Ikiffowr0.net
>>319
うちの新人が最初に書いてきたコードがそれだったわ (実話
もちろん熟語の意味と変数の用途は無関係で、厨二ワードを思いつきで適当に並べただけ

322:デフォルトの名無しさん (ワッチョイ 57ad-LzhE)
20/04/15 02:43:11 zLal5e060.net
>>311
初心者なら具体的な処理を抽象化していく
ボトムアップのやり方が分かりやすいと思う

たとえばかけ算の九九を求める関数に
引数でXを渡してXxX(12×12など)を
求める関数に抽象化すると使い道が広がる

あるいは5行6列目のセルを処理する関数を
X行Y列目を処理するように拡張するだとか
関数の引数は数学の変数のように考える


そして関数(やクラス)を自作する時のポイントは
なるべく関数を小分けにして組み合わせて使うこと
関数が大きくなると理解するのも難しくなるから

印刷やシートのコピーとか別の処理を
ひとつの関数で全部やろうとしないで
別々の関数に書いておく

それで呼び出し元の関数から
実行する関数をIF文で切り替えたりする
Excel VBAに限らずプログラミングの定石

323:デフォルトの名無しさん (ワッチョイ ffcc-Ho7r)
20/04/15 08:51:03 7yJWhPoQ0.net
個人的な意見だけど
変数を日本語にする事の欠点は、目立ちすぎて、他が見にくくなる事だと思う
ループカウンタの様な頻出する変数には、制御構造が見にくくなるので避けるべき
ルーチンの目的的なものとか、あまり使わないような変数については、場合によっては推奨

324:デフォルトの名無しさん (ワッチョイ d7ac-DNPS)
20/04/15 10:07:54 fYr2Vm730.net
いいたいことはわかる
なでしこみたいに構造もそうなってれば、比較して自然に見えるしね

まあでも英語で慣れちゃってると、気になっちゃうから可読性低いと評価してしまうわ

325:デフォルトの名無しさん (ワッチョイ 1791-N0vN)
20/04/15 11:57:43 qO0uVKDC0.net
>>303
絶対に止めた方が良い。
今、他人のそういうコードで四苦八苦してる。

しかもプロシージャも日本語だから
If 測定結果 Then
などとあって、"測定結果"が変数なのかBooleanを返すプロシージャなのかすら直ぐには分からない。

326:デフォルトの名無しさん
20/04/15 12:04:59.54 tJWgJTOGM.net
それはエーゴでもかわらなくなくね?

327:デフォルトの名無しさん
20/04/15 12:43:22.36 9r3ObWq4r.net
>>32
「定義」ですぐわかる

328:デフォルトの名無しさん
20/04/15 12:47:51.20 9r3ObWq4r.net
325の間違い

329:デフォルトの名無しさん (ワッチョイ 77ce-Ho7r)
20/04/15 13:14:16 Ikiffowr0.net
がっつり英語だと、こんどは辞書を引く作業が待ってることもある
発音がわからないと会話で困るし

330:デフォルトの名無しさん (ワッチョイ 778f-Eg7/)
20/04/15 13:39:00 zDLD/Qb60.net
特定のURLのソースに任意の文字列が記載されているかどうかを判断したい。

URLリンク(auctions.yahoo.co.jp)
URLリンク(auctions.yahoo.co.jp)
URLリンク(auctions.yahoo.co.jp)
というページのリストがあったとして、ソースに"停止中"もしくは"無効"の文字列が
あるURLにはB列に"NG"と吐き出す、ということをやりたいです。

URLリンク(okwave.jp)
が近いんですが「2)一般的な文字列の場合」はエラーが出て動きませんでした。
VBAに詳しい人、よろしくお願いします。

331:デフォルトの名無しさん (アウアウエー Sadf-Ho7r)
20/04/15 13:51:28 5mkkxmmPa.net
grep なら一行でできるのに VBA でやらないといけないのか

332:デフォルトの名無しさん (ワッチョイ bff7-pwY/)
20/04/15 13:53:51 VtNtlccy0.net
人に送ったら日本語フォントない海外PCで全く動かなくなったりしたな

333:デフォルトの名無しさん (ワッチョイ 77ce-Ho7r)
20/04/15 14:13:32 Ikiffowr0.net
>>330
参考リンク先のどのプログラムを試して、どの行でどんなエラーが出たか書いて
エラーが出たままでCtrl+Cを押せば、エラーメッセージがクリップボードに入るから、それをコピペして
あと、目的のWEBサイトの文字コードはちゃんと確認した?

334:デフォルトの名無しさん (ワッチョイ 77ce-Ho7r)
20/04/15 14:16:13 Ikiffowr0.net
>>331
まあ wget | nkf | grep のが簡単かもね

335:330 (ワッチョイ 778f-o1R8)
20/04/15 14:42:43 zDLD/Qb60.net
>>333
すいません。
コピペ繰り返してたらなんとか行けました。

Sub YouTube_Search()
Dim objIE As Object
Dim i As Long
Dim j As Long
Set objIE = CreateObject("InternetExplorer.Application")
With objIE
For i = 1 To Range("A1").End(xlDown).Row
.navigate Cells(i, 1).Value
While .Busy Or .ReadyState <> 4: DoEvents: Wend
For j = 1 To .document.all.Length
If InStr(.document.all(j - 1).outerText, "Yahoo! JAPAN IDが無効です") > 0 Then
Cells(i, 2).Value = "*"
Exit For
End If
Next
Next
End With
objIE.Quit
Set objIE = Nothing
End Sub

336:デフォルトの名無しさん (スップ Sdbf-N0vN)
20/04/15 14:43:10 dyZQaRRHd.net
>>326
確かに。
でも日本語フィールドが多いSQL文の中で、一部の変数も日本語だったりするのとか、変数と気付かなかったりするのもあるし、最悪だよ。

337:デフォルトの名無しさん (アウアウウー Sa1b-4fgg)
20/04/15 15:14:20 4idtb0t/a.net
かわらなくね?かわらなくなくね?

338:デフォルトの名無しさん (ドコグロ MMbf-A2g6)
20/04/15 19:27:28 DRi90/CyM.net
>>325
なんの測定なのか知らんけど測定結果がBooleanな時点で知能の足らない職場と言うことがわかる
コードレビューなんてしたこと無いだろ

339:デフォルトの名無しさん
20/04/15 21:47:05.33 vXo73Hp80.net
辞書で調べても馴染みのない単語でかえってわかりにくくて結局日本語にしてみたりね

340:デフォルトの名無しさん
20/04/15 22:13:27.05 qXjFLib20.net
311です。
>>314,317,322
私がやろうとしていたことが、まず効率の悪いことだったんですね・・・
細かく分けて関数作って、それを組み合わせて作る方法を取りたいと思います。
(ただ、どこまで細かく分ければいいのか、まだ要領を掴んでおりませんが)
ありがとうございました。

341:デフォルトの名無しさん (ブーイモ MMcf-IW4T)
20/04/15 22:29:20 bRq9+Y6qM.net
初心者ですがご教授下さい

サンプルの工程能力で1個につき6項目の測定値をソフトがエクセルにデータ出力してくれるけど、日によっては23個だったり25個だったりしか測定できず

残りの記入方法は人によって様々で
ある人は測定値のバラつきに近い値をテンキーで手打ち
ある人はエクセルのrandbetween関数で
各項目の測定値のMAXとMINで乱数だしてそれをコピぺ

サンプル1 サンプル2  ~サンプル30
項目1
項目2
項目3
項目4
項目5
項目6

こんな並びで全項目測定後に出力されるから項目の途中で止まることはないです

「サンプル1~30の間の項目1の行に空白があった場合、それより前(左)にある全ての測定値を参考に乱数でサンプル30の項目6まで埋める」

これは難易度かなり高いですか?

342:デフォルトの名無しさん (ブーイモ MMcf-IW4T)
20/04/15 22:33:03 bRq9+Y6qM.net
誤記というか間違えました
「サンプル1~30の間の項目1の列、又はセルに空白があった場合、それより前(左)にある全ての測定値を参考に乱数でサンプル30の項目6まで埋める」
です
すみませんがどういったアプローチがあるのか
そもそもできるのかご教授下さい

343:デフォルトの名無しさん (アウアウエー Sadf-fVbL)
20/04/15 22:49:03 xz8oNroja.net
>>342
それは多分難しくないと思うけど、読解力がなくてよく分からない。
サンプル的なものを挙げてもらえると分かりやすいかも。

344:322
20/04/15 23:00:46.12 zLal5e060.net
>>340
>どこまで細かく分ければいいのか
基本的に処理は関数名に沿って分ける
関数名から逸脱した処理があれば
別の関数に分けて整理していく
だから関数や変数の
適切な命名が重要になってくる
面倒でも名前と処理を対応させた方が
後でメンテナンスしやすくなる

345:デフォルトの名無しさん
20/04/15 23:19:56.30 bRq9+Y6qM.net
>>343
いや、俺の説明力がなくて、、
というか行列が逆でした
再度説明させてください
URLリンク(i.imgur.com)
こんな感じで機械がエクセルに出力してくれるけど
残りのサンプルの数字は上の測定値を見てみんなそれぞれランダムにテンキーで入力したりと、いわゆる数値を適当にバラして打ち込んでます。(偽装というほど重要ではないので)
日によって測定できるサンプルが数が違います。
参考になるか程度のスクショになりますが
「サンプル1から30までで空白の行列があったらそれまで測った上のサンプルの測定値を元に乱数でサンプル30の項目6までVBAが全て記入してくれないかなと、
こんな感じです


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