1 名前:デフォルトの名無しさん mailto:sage [2020/03/17(火) 16:27:20.88 ID:hh8LiIgR0.net] ExcelのVBAに関する質問スレです コード書き込みや作成依頼もOK ※前スレ Excel VBA 質問スレ Part64 https://mevius.5ch.net/test/read.cgi/tech/1575297834/ VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
237 名前:デフォルトの名無しさん (ワッチョイ f71f-nfbJ) mailto:sage [2020/04/09(Thu) 21:58:32 ID:TQ3Lwxfd0.net] >>221 調べるとDXFはTextファイル形式で出来ているみたいでネットで調べながらやってみたけど、重い。まぁ俺の書き方が駄目な気もするけど。線の数が4万とか超えてる。
238 名前:デフォルトの名無しさん mailto:sage [2020/04/09(木) 23:05:01.47 ID:vJBq1mcg0.net] 作者不明のファイルを修正しているのですが、そのファイル自身を指定するのにファイル名で 記述してありました。これだと「●●Ver1.0.xlsm」→「●●Ver1.1.xlsm」のようにファイル名を 変える度にコードを修正しなくてはならないためThisWorkBookに変えようかと思っているのですが その場合なにか弊害とかあるんでしょうか?
239 名前:デフォルトの名無しさん (ワッチョイ e23e-1Ne1) [2020/04/10(金) 07:51:15 ID:goOf5Ofq0.net] シートを全選択したら一括で変更できるのか
240 名前:デフォルトの名無しさん (オッペケ Sr5f-vH9a) mailto:sage [2020/04/10(金) 08:26:28 ID:tq9uLSTsr.net] >>236 弊害は無いよ
241 名前:デフォルトの名無しさん (オッペケ Sr5f-q7V1) mailto:sage [2020/04/10(金) 09:37:44 ID:Rte1PrgOr.net] そのファイル自身だと完全に明確で揺らがないなら、thisworkbookでいんじゃね
242 名前:デフォルトの名無しさん (ワッチョイ c6da-AglQ) mailto:sage [2020/04/10(金) 19:23:44 ID:LG9l2UEQ0.net] どこから参照されてるのか全部調べないとわからないんじゃないかそれ。 まあThisworkbookを知らないだけの可能性は高いが。
243 名前:デフォルトの名無しさん (ワッチョイ eb5e-AglQ) mailto:sage [2020/04/10(金) 19:27:26 ID:f64Irgef0.net] >>238,239 ありがとうございます。 今日内容を確認してきましたが、マクロが記述されたブック(A.xlsm)上でシートを作成し、それをコピーして 新規ブック(B.xlsx)を作成してからもう一度A.xlsmの特定のシートをアクティブにする、という処理の中で A.xlsmのブック名を明示してありました。 今日は時間がなくて試せなかったのですが、この場合でもマクロが記述されたブックはA.xlsmなので ThisWorkBookで問題ないかなと思ったのですが、それであっていますでしょうか?
244 名前:デフォルトの名無しさん (ワッチョイ eb5e-AglQ) mailto:sage [2020/04/10(金) 19:38:53 ID:f64Irgef0.net] >>240 ThisWorkBookを知らないというかちゃんと理解していないのはその通りだと思います。 ThisWorkBookの主体がが変わる場合があるということでしょうか? マクロ実行中にほかのブックに記述されたマクロを利用したりすると変わる、とかですかね?
245 名前:デフォルトの名無しさん (ワッチョイ 62ad-JJvI) mailto:sage [2020/04/10(金) 20:30:11 ID:oDKSQVIR0.net] ThisWorkBookはプログラムが記述されているワークブックを参照せよっていう意味だからブックAを実行中にアクティブがブックBに切り替わったりしてもブックAに記述されたThisWorkBookはブックAを参照する
246 名前:デフォルトの名無しさん mailto:sage [2020/04/11(土) 03:52:15.33 ID:w8fV8nev0.net] エクセルテンプレートを開いた状態 ↓ フォルダにある1つ目のtxtデータをエクセルテンプレにドラッグしてエクセル化 ↓ エクセル化したC1:C8の範囲をコピー ↓ 元々開いてあるエクセルのA1:A8に「数値」のみ貼り付け ↓ エクセル化されたデータは閉じて2つ目のtxtをドラッグしてエクセル化 ↓ C1:C8の範囲をコピーしてテンプレのB1:B8に「数値」のみコピー って感じでテンプレに測定機から出したデータをひたすら貼ってるんですが これを簡単にするVBAとか可能ですか? 人によってはテキストをエクセル化はまとめて5つドラッグしたりして順番に貼ってく人もいます エクセル化したデータの数値のみコピーしたいセルはC1:C8は固定 テンプレにはABCDと順番に貼って増やしていく これをなんとかマクロかする案があればご教授お願いします。
247 名前:デフォルトの名無しさん (ワッチョイ 4f5f-791I) mailto:sage [2020/04/11(土) 07:25:04 ID:+FpWMQNh0.net] 可能です。
248 名前:デフォルトの名無しさん mailto:sage [2020/04/11(土) 08:08:50.84 ID:X9U6v4B00.net] テンプレート(.xlt .xltx)は何に使うの?
249 名前:デフォルトの名無しさん (ワッチョイ e2b5-G6fV) mailto:sage [2020/04/11(土) 10:50:20 ID:w8fV8nev0.net] >>245 その一言でも希望があってありがたい どういう流れで作ったらいいか何か構想のヒントなどあればいただきたいです ・テンプレのエクセルにボタン設置 ・テンプレ開くと同時にユーザーフォーム開くようにしてテキスト選択できるようにするのか ・そもそもVBAがまだ人間になれてない猿並のスキル >>246 テンプレは.xlsxです、普通のエクセルの
250 名前:デフォルトの名無しさん (アウアウエー Sa3a-d4/r) mailto:sage [2020/04/11(土) 10:56:04 ID:DIdffniea.net] >>244 txtデータは、例えばカンマで区切られてるとか、空白で区切られてるとか、決まってるの? 内容的にはVBAがある程度使える人なら難しくないと思うけど、ちょっとネットで聞いて作ろうとかいうのは難しいんじゃないかな。
251 名前:248 mailto:sage [2020/04/11(土) 11:19:08.65 ID:DIdffniea.net] txtファイルがどのくらいの数あるのかで、どういう手順が良いか違ってくると思います。 そんなにたくさんないなら、テンプレファイル(◯◯.xlsm )に、ボタンを用意。ボタンを押したらファイルを選択するダイアログが出て、該当のtxtファイルを選択してデータを読み込む。 txtファイルがたくさんあるとこの手順は面倒なので、同一フォルダに入れてなんらかの順番で読み込むようにするとか。
252 名前:デフォルトの名無しさん mailto:sage [2020/04/11(土) 11:27:54.59 ID:YvJJVii7M.net] >>248 そこら辺の知識がなくてとにかくテキストを、開いてるエクセルにドラッグすると決まったセル範囲に例えばC1:C5に欲しいデータが出るのでそれをコピーしてるのが現状です イメージ的にいつも https://i.imgur.com/50VhJqS.jpg テキスト入ったフォルダとエクセルを並べる ↓ https://i.imgur.com/8TiTDap.jpg ドラッグしてエクセル化 ↓ https://i.imgur.com/OrMUP1G.jpg 数値のみコピーしてテンプレに貼り付け ↓ https://i.imgur.com/htHvRLv.jpg 閉じた後、次のテキストをドラッグしてエクセル化 ↓ https://i.imgur.com/1F89knY.jpg テンプレの次の列に貼り付け これを日によっては70くらいやったりしてます、、
253 名前:デフォルトの名無しさん mailto:sage [2020/04/11(土) 11:31:26.34 ID:YvJJVii7M.net] >>249 レスありがとです!!!そこです! 日によってデータ数が違って 5つの日もあれば30の日もあれば75の日もあります ボタン作って該当するデータの数を任意で選べたりできないのかなぁと妄想してます
254 名前:デフォルトの名無しさん mailto:sage [2020/04/11(土) 11:41:57.94 ID:YvJJVii7M.net] この貼り付けるエクセルはそもそもこんなのでテンプレなの?っていうは一応エクセルの関数で 他の何種類もあるシートに複数の関数で出せる紐付けしてあるので テンプレというか自分なりのベースのようなものです 本当はその関数すら慣れてる人ならVBAで余裕で組むんだろうなと思うのですがそんな欲ばる資格がまだないのでまずはこの作業を…
255 名前:デフォルトの名無しさん mailto:sage [2020/04/11(土) 11:45:20.84 ID:DIdffniea.net] GetOpenFilenameメソッドでダイアログで複数のtxtファイルを選択するか、「転記前フォルダ」とかに対象のtxtファイル入れておいて、フォルダ内をfor eachですべて読み込むか。読み込み済みのtxtは自動で「転記済フォルダ」に入れるか削除。 どちらにしてもtxtファイルの名前順に読み込むようになるだろうから、そこを一工夫する必要があるかも。
256 名前:デフォルトの名無しさん mailto:sage [2020/04/11(土) 12:37:41.59 ID: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
257 名前:デフォルトの名無しさん mailto:sage [2020/04/11(土) 12:48:46.57 ID:7ipBnOPU0.net] >>247 マクロ記録してそれを加工すればいい
258 名前:デフォルトの名無しさん mailto:sage [2020/04/11(土) 12:55:48.43 ID:Zf+aIjAZ0.net] >>254 うおおおお マジでありがとうございます! いま外出中なので帰ったら速攻でVBE開いて取りかかります!! 他のこんな猿にアドバイスくれる人達に感謝のみ 批判されて当然のスキルしかないのでそういう覚悟もして相談させてもらってます 6月くらいまでには形にして自分もある程度 コードのルールや流れを猛勉強します >>255 それも頑張ります、まず加工する知能を身につけます
259 名前:デフォルトの名無しさん (アウアウウー Sabb-Fqhg) mailto:sage [2020/04/11(土) 18:21:57 ID:jjkr4EqGa.net] 個人的にはCHDIRと#1ってのが 気になった
260 名前:デフォルトの名無しさん mailto:sage [2020/04/11(土) 20:11:07.53 ID:Lp6A5Woc0.net] 恋だな
261 名前:デフォルトの名無しさん mailto:sage [2020/04/11(土) 20:18:04.56 ID:7YQkqL610.net] 6月て こんなんIT系の仕事じゃなくても普通に1日で理解するやろ。。 多分セルごとに書き込むからファイル数とデータによっては遅くなるな
262 名前:デフォルトの名無しさん mailto:sage [2020/04/11(土) 21:02:43.27 ID:Mh4soJ8e0.net] クリップボードに整形したデータ入れてペーストでもいいのよ タブで右のセル 改行で次の行
263 名前:デフォルトの名無しさん (ワッチョイ c28b-KRXG) mailto:sage [2020/04/12(日) 05:51:52 ID:2Kcsozov0.net] VBAについて詳しい方に質問です。 現在VBAでオートフィルタの自動プログラムを組んでいます。 そこで質問があります。以下の様なデータがあったとします。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 私の名前は、太郎です。 私の名前は、岩崎です。 あなたの名前は、太郎です。 あなたの名前は、岩崎です。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 検索ワードとしてスペース区切りで「あなた 太郎」と入力された場合 「あなた」と「太郎」を同時に含む行のみをフィルタリングするには どういう記述を Criteriaにすれば良いのでしょうか? Criteria1:="*" & [検索ワード] & "*" 現在こんな感じで記述してますがうまく動きません。 AND条件、そしてOR条件で指定する方法を教えてくださいm(_)m
264 名前:デフォルトの名無しさん (ワッチョイ c6da-AglQ) mailto:sage [2020/04/12(日) 08:05:06 ID:YDpAYAt+0.net] >>261 それやるならオートフィルタじゃない。 アドバンスフィルタ。
265 名前:デフォルトの名無しさん (ワッチョイ bb7c-slfm) mailto:sage [2020/04/12(日) 11:41:12 ID:QKHzDSq80.net] >>261 シート上でオートフィルタかける時にできること以外のことはできない
266 名前:デフォルトの名無しさん (ワッチョイ bb7c-slfm) mailto:sage [2020/04/12(日) 11:45:08 ID:QKHzDSq80.net] どうしてもその記述でやりたいならワードをスペースで分割してから条件2つ指定する
267 名前:デフォルトの名無しさん mailto:sage [2020/04/12(日) 13:12:18.32 ID:2Kcsozov0.net] ありがとうございます。 アドバンスフィルタとやらを調べてみます。
268 名前:デフォルトの名無しさん mailto:sage [2020/04/12(日) 13:17:20.10 ID:bBYC6g030.net] >>261 And条件の場合はこう書く Criteria1:="=*あなた*", Operator:=xlAnd, Criteria2:="=*太郎*"
269 名前:デフォルトの名無しさん mailto:sage [2020/04/12(日) 13:39:43.30 ID:2Kcsozov0.net] >>266 ありがとうございます!!
270 名前:デフォルトの名無しさん mailto:sage [2020/04/12(日) 17:59:57.23 ID:Vvo4XdlE0.net] いえいえ
271 名前:デフォルトの名無しさん (ワッチョイ e2b5-L0r9) mailto:sage [2020/04/13(月) 01:44:02 ID:sGzWGZEv0.net] >>254 これを、やってみたけどcellsのところでエラーがでます、うーん 頑張ります
272 名前:デフォルトの名無しさん (ワッチョイ 4f5f-791I) mailto:sage [2020/04/13(月) 07:29:10 ID:aaxqX2kx0.net] >>269 ヒント 変数 r
273 名前:デフォルトの名無しさん (ブーイモ MM5b-qE1F) mailto:sage [2020/04/13(月) 08:13:39 ID:q00oGNOiM.net] >ヒント ウザっ
274 名前:デフォルトの名無しさん (ワッチョイ 43ce-AglQ) mailto:sage [2020/04/13(月) 11:51:14 ID:V+m1zN0B0.net] >>269 それはたぶん、txtファイルの中身が想定外 例えば5行以下しかないか、C列にデータが入ってないか
275 名前:270 mailto:sage [2020/04/13(月) 12:54:16.85 ID:RFtb5de7M.net] >>269 すまん。変数 r はforで回ってた。
276 名前:デフォルトの名無しさん mailto:sage [2020/04/13(月) 13:27:32.03 ID: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
277 名前:デフォルトの名無しさん mailto:sage [2020/04/13(月) 14:19:37.44 ID: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
278 名前:デフォルトの名無しさん mailto:sage [2020/04/13(月) 14:20:29.76 ID:6KK4qS560.net] ワークシート機能とか使わないなら、 ・その表を全て一気にもにょっと2次元配列(tableA)にいれる(コンマ数秒) ・2次元配列(tableB)を一旦定義 ・tableAの各行(イメージね)をforeachする。++カウントする変数をつくる。これはtableBの行数。 ・foreachのなかで、tableAのS列がその条件に合致しなければ、tableBに行のそれぞれの要素を代入する(redim preserveしながら) ・できたtableBをどこかにペタッと貼る Excelぽくやるなら ・オートフィルタする ・2次元配列に一旦もにょっとコピーする(可視セルのみ、CurrentRegionかな) ・シートをクリアするか他のシートにコピーした2次元配列をペタっと貼る
279 名前:デフォルトの名無しさん mailto:sage [2020/04/13(月) 14:21:50.93 ID:6KK4qS560.net] ちなみに行をforeachしながら行を消すとズレが生じるんじゃね、しらんが
280 名前:デフォルトの名無しさん mailto:sage [2020/04/13(月) 16:10:06.75 ID:7RR5m+brM.net] >>254 色々いじっていますがこれをどう手直ししていいかわからず… たとえばこれをテキストを変換したときにF2:F13にくるデータを エクセルにはB5:B16、C5:C16と順番になるよるに出力するようになるにはどう調整すればいいのか、がんばって調べてます
281 名前:274 mailto:sage [2020/04/13(月) 16:10:57.06 ID:kcz/TGUB0.net] >>275 ありがとうございます。
282 名前:デフォルトの名無しさん (ラクッペペ MM8e-CJtn) mailto:sage [2020/04/13(月) 18:33:52 ID:xh/6KDMeM.net] >>278 ヒント: F1キー
283 名前:デフォルトの名無しさん (ワッチョイ e2b5-G6fV) mailto:sage [2020/04/13(月) 19:37:09 ID: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が存在してて どこを今度は変えたらいいかわかりません
284 名前:デフォルトの名無しさん mailto:sage [2020/04/13(月) 19:44:03.37 ID:V+m1zN0B0.net] >>281 cとかfは変数だよ ワークシートの列じゃない
285 名前:デフォルトの名無しさん mailto:sage [2020/04/13(月) 19:48:23.00 ID:V6BYDDPb0.net] 猿とか以前にそもそも基本知識すら身に付けてないのでは…
286 名前:デフォルトの名無しさん mailto:sage [2020/04/13(月) 19:54:15.29 ID:sGzWGZEv0.net] そう、変数なんだというとこまではぎりぎり何とかわかったんです ただ、引っ張ってくるテキスト側の列をどこで制御してるのかがわからず >>283 完全にその通り 単純に勉強不足 ネットでかじってばかりじゃダメだと古いけど本も借りました ただ本当にマジで難しい… https://i.imgur.com/7Ujyfqa.jpg
287 名前:デフォルトの名無しさん mailto:sage [2020/04/13(月) 19:55:45.77 ID: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
288 名前:デフォルトの名無しさん (ワッチョイ e2b5-G6fV) mailto:sage [2020/04/13(月) 19:58:56 ID:sGzWGZEv0.net] うお、変数の宣言をあらかじめわかりやすくしてくれて馬鹿な俺を誘導してくれようとする人が!!絶対そんな感じのありがたい人だ! 今から車に乗って帰ったら速攻PC開きます!−−!!
289 名前:デフォルトの名無しさん mailto:sage [2020/04/13(月) 20:19:57.09 ID:Kp4LtUp30.net] >>281 >>284 まずVBAの入門書を読んで基礎知識を 整理するといい(するみたいだけど) あと「テキストから引っ張る」っていう言葉が曖昧 「テキストファイルを読み込む」「セルに展開する」 みたいに仕様を適切な言葉で把握しておくだけで ネットで検索すればすぐサンプルコードが引っかかる 本当はなるべく「f」も「file」とか具体的に 命名した方が分かりやすくていいと思うけど (ファイル用変数とセルの列を混同した一因だろうし) まず日本語のレベルで言葉を整理しよう
290 名前:デフォルトの名無しさん mailto:sage [2020/04/13(月) 22:05:23.75 ID: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 何度やっても一瞬で完璧に処理が終わる… だがさっぱり意味がわからん、、 本読みます。。
291 名前:デフォルトの名無しさん (ワッチョイ e2b5-G6fV) mailto:sage [2020/04/13(月) 22:52:20 ID:sGzWGZEv0.net] ああ、ダメだ。'でメモりまくったけど 出力する側のエクセルシートの列の指定はわかったけど行の指定がわからなかった。勉強ですね。。 みなさんありがとうございました。
292 名前:デフォルトの名無しさん mailto:sage [2020/04/13(月) 23:09:41.81 ID:nLvmNP810.net] ちらっちらっ
293 名前:デフォルトの名無しさん mailto:sage [2020/04/13(月) 23:14:07.84 ID:sGzWGZEv0.net] ごめん、ダメだ。助けてください。 混乱しまくってます。全然違った 読み込むテキスト側の行指定がわからない、、 ベースの方にテキスト2行目8行目からを指示、 とかそれをしないと会社で対応できないです…
294 名前:デフォルトの名無しさん mailto:sage [2020/04/13(月) 23:21:22.07 ID:V6BYDDPb0.net] そりゃ変数すら知らない知識レベルならこんな短時間じゃなんもできんだろう…
295 名前:デフォルトの名無しさん (ワッチョイ e2b5-G6fV) mailto:sage [2020/04/13(月) 23:39:16 ID: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日 毎日勉強しないとなぁ。ほんと
296 名前:デフォルトの名無しさん (ワッチョイ f71f-nfbJ) mailto:sage [2020/04/13(月) 23:57:52 ID:k2GojJ+U0.net] PDFファイル(画像)をEXCELに貼り付ける際の画像の素の大きさってどうやって取得できます?
297 名前:デフォルトの名無しさん mailto:sage [2020/04/14(火) 00:02:13.22 ID:A2P11e7ma.net] いきなり別ファイル(txtファイル)読み込んだり、配列変数あったりで難しいよ。 本来はもっと基礎からやらないと。
298 名前:デフォルトの名無しさん mailto:sage [2020/04/14(火) 00:02:49.64 ID: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
299 名前:デフォルトの名無しさん (ワッチョイ e2b5-G6fV) mailto:sage [2020/04/14(火) 00:29:53 ID: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日
300 名前:デフォルトの名無しさん mailto:sage [2020/04/14(火) 16:20:04.61 ID:BhIp9WlU0.net] >>296 Tekist ワロタ
301 名前:デフォルトの名無しさん (スップ Sd02-AglQ) mailto:sage [2020/04/14(火) 18:14:44 ID:srMYTcHJd.net] TekisutoでもTextでもTexteでもないのな
302 名前:デフォルトの名無しさん mailto:sage [2020/04/14(火) 19:13:19.46 ID:Ua5gdcz00.net] 今日、神懸かり的に職場の測定機のPCのツールとして産声を上げました あとは起動と同時に出るユーザーフォームにボタン4くぐらい作って割り当ててとりあえず完成しそうです そして今日から本を愛読して変数について基礎から学んできます 自分で変えたのがわかるように誤記ぐらいにしとかないと何かのコマンドやコードがわからないので textって打ったら先頭が大文字に変わるから こりゃいかんと
303 名前:デフォルトの名無しさん (ワッチョイ bb7c-slfm) mailto:sage [2020/04/14(火) 19:29:23 ID:2/fcFDaL0.net] なんでもいいから一つ作れってのは作ってもらえって意味じゃないと思うな
304 名前:デフォルトの名無しさん (ブーイモ MM5b-L0r9) [2020/04/14(火) 19:39:44 ID:5O9c120iM.net] 活気が出てええやん 過疎スレやし
305 名前:デフォルトの名無しさん mailto:sage [2020/04/14(火) 21:50:12.98 ID:Ua5gdcz00.net] 変数の定義や宣言をとにかく最初にする癖をつければ 後でわかりやすいことが本でわかり そして英字じゃなくてもいいことに驚きました 慣れてるたち人のサイトだと Dim Folderpass As String Dim FileInt As Long とか英字だけど Dim フォルダ場所 As String Dim ファイル数 As Long とか和文字だと支障でますかねこれ
306 名前:デフォルトの名無しさん (アウアウエー Sa3a-d4/r) mailto:sage [2020/04/14(火) 21:58:17 ID:A2P11e7ma.net] 個人的には変数名で日本語は避けてる。 逆に読みにくいので。
307 名前:デフォルトの名無しさん (ワッチョイ 23da-AglQ) mailto:sage [2020/04/14(火) 22:06:22 ID:4z3IdTPt0.net] 拙者も日本語はコメントで書くようにしてコードは英数字で書くようにしている
308 名前:デフォルトの名無しさん mailto:sage [2020/04/14(火) 22:20:28.98 ID:Ua5gdcz00.net] なるほど、俺も英字で作る癖つけた方が良さそうですかね 字の色でわかるだろ…とは言え、なんかの関数やコマンドと似てるとやはり最初は難しいですね Tekist Fname Fpass shseeet とかにしてこれ俺の宣言した変数だわ って最初は作ってみます あざす!
309 名前:デフォルトの名無しさん (アウアウエー Sa3a-d4/r) mailto:sage [2020/04/14(火) 22:37:22 ID:A2P11e7ma.net] 変数の付け方とかで、書いた人の実力が分かるという説もあるから。 私は小文字で始めるキャメル式が見やすいと思って大体統一してる。
310 名前:今度はビルドとはとか言い出すんだろうか? (ドコグロ MMaf-Y19k) mailto:sage [2020/04/14(火) 22:38:37 ID:e6NkXt+SM.net] > とか和文字だと支障でますかねこれ 今時C/C++ですら変数名に漢字使えたりするぐらいだから問題ない 特にフォルダーパスをFolderpassとか書くような人は積極的に使うべき
311 名前:デフォルトの名無しさん mailto:sage [2020/04/14(火) 22:53:49.36 ID:PthiGcDI0.net] VBAだとそんなに困ることはないんだけど、.netはライブラリが膨大すぎて、既存のメソッドやプロパティと名前が被るかどうかの確認が面倒 あと、語彙力が足りなくてユニークな英単語が思いつかないとか、辞書で調べて付けた変数名があとから見返すと意味がわからないとかある
312 名前:デフォルトの名無しさん mailto:sage [2020/04/14(火) 23:05:59.10 ID:wBIN668P0.net] >>309 >語彙力が足りなくてユニークな英単語が思いつかないとか 曜日、曜日って英語でなんて言ったかなー せや、yb ですましたら
313 名前:デフォルトの名無しさん (ワッチョイ f709-zfCe) mailto:age [2020/04/14(火) 23:20:30 ID:1uq460ot0.net] 最近プログラム自体始めた初心者です。 日々勉強ばかりですので、汎用性が高くなるよう目指し、 知識を入れてはコードを改良し、それを外部保存、そして 実行するブックで呼び出して使っています。 ついこないだ引数という便利なものを知り、さっそく使っているのですが、 ひとつ疑問が。 「特定セルに、作成したリストの上から順に内容を書き込む」という 簡単なfor〜nextループマクロを使いまわしたいのですが、そのループ処理内容を callなどから設定することはできるのでしょうか? (たとえば、あるブックでは印刷処理したい、けどこっちではシートコピー処理したい、 など) 引数で、特定セルやリストの開始行は設定できたのですが。。。 宜しくお願いいたします。
314 名前:デフォルトの名無しさん mailto:age [2020/04/14(火) 23:23:30.52 ID:1uq460ot0.net] >>311 です。一部分かりづらかったので訂正いたします。 ×「そのループ処理内容をcallなどから設定することは〜」 〇「そのループ処理内容を、実行するブックから設定することは〜」
315 名前:デフォルトの名無しさん [2020/04/14(火) 23:30:42.95 ID:ps8T64zC0.net] 馬鹿が一気に出てきたのはコロナウイルスで脳炎や痴呆症でも発症するのか?
316 名前:デフォルトの名無しさん mailto:sage [2020/04/14(火) 23:31:29.82 ID:PthiGcDI0.net] >>311 サブルーチンの中にブック名を判定するIfを入れるとか、引数を増やして処理を切り替えるとか、方法はいくつもある
317 名前:デフォルトの名無しさん (ワッチョイ e2b5-G6fV) mailto:sage [2020/04/14(火) 23:44:19 ID: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 見様見真似というかネットからパクってユーザーフォームのボタンに追加できました。 このスレの人たち凄いです
318 名前:デフォルトの名無しさん (ワッチョイ 068e-f9/D) [2020/04/14(火) 23:55:34 ID:ps8T64zC0.net] いい加減に馬鹿は消えろ
319 名前:デフォルトの名無しさん (ラクッペペ MM8f-AKYr) [2020/04/15(水) 00:06:27 ID:IBkk3oxvM.net] >>311 他のナウい言語みたいに関数ポインタとか使いたいのだろうが おとなしくコマンド文字列でも渡してselectでもしとけ
320 名前:デフォルトの名無しさん mailto:sage [2020/04/15(水) 01:14:25.80 ID:vPyadW120.net] ナウい変数名を考えようと思って色々試したら、結構いけるじゃん。 Dim ヽ, 卍, ¶, , f, , , ≒, ♪ ♪ = 1 Debug.Print ♪
321 名前:デフォルトの名無しさん mailto:sage [2020/04/15(水) 01:17:01.85 ID:vPyadW120.net] あ、普通にこれでいいか。 Dim 骸骨剣士, 死霊の騎士, 幽霊, 死神
322 名前:デフォルトの名無しさん (ワッチョイ 77ce-Ho7r) mailto:sage [2020/04/15(水) 01:24:08 ID:Ikiffowr0.net] For 愛 = 1 To 10
323 名前:デフォルトの名無しさん (ワッチョイ 77ce-Ho7r) mailto:sage [2020/04/15(水) 01:34:17 ID:Ikiffowr0.net] >>319 うちの新人が最初に書いてきたコードがそれだったわ (実話 もちろん熟語の意味と変数の用途は無関係で、厨二ワードを思いつきで適当に並べただけ
324 名前:デフォルトの名無しさん (ワッチョイ 57ad-LzhE) mailto:sage [2020/04/15(水) 02:43:11 ID:zLal5e060.net] >>311 初心者なら具体的な処理を抽象化していく ボトムアップのやり方が分かりやすいと思う たとえばかけ算の九九を求める関数に 引数でXを渡してXxX(12×12など)を 求める関数に抽象化すると使い道が広がる あるいは5行6列目のセルを処理する関数を X行Y列目を処理するように拡張するだとか 関数の引数は数学の変数のように考える そして関数(やクラス)を自作する時のポイントは なるべく関数を小分けにして組み合わせて使うこと 関数が大きくなると理解するのも難しくなるから 印刷やシートのコピーとか別の処理を ひとつの関数で全部やろうとしないで 別々の関数に書いておく それで呼び出し元の関数から 実行する関数をIF文で切り替えたりする Excel VBAに限らずプログラミングの定石
325 名前:デフォルトの名無しさん (ワッチョイ ffcc-Ho7r) mailto:sage [2020/04/15(水) 08:51:03 ID:7yJWhPoQ0.net] 個人的な意見だけど 変数を日本語にする事の欠点は、目立ちすぎて、他が見にくくなる事だと思う ループカウンタの様な頻出する変数には、制御構造が見にくくなるので避けるべき ルーチンの目的的なものとか、あまり使わないような変数については、場合によっては推奨
326 名前:デフォルトの名無しさん (ワッチョイ d7ac-DNPS) mailto:sage [2020/04/15(水) 10:07:54 ID:fYr2Vm730.net] いいたいことはわかる なでしこみたいに構造もそうなってれば、比較して自然に見えるしね まあでも英語で慣れちゃってると、気になっちゃうから可読性低いと評価してしまうわ
327 名前:デフォルトの名無しさん (ワッチョイ 1791-N0vN) mailto:sage [2020/04/15(水) 11:57:43 ID:qO0uVKDC0.net] >>303 絶対に止めた方が良い。 今、他人のそういうコードで四苦八苦してる。 しかもプロシージャも日本語だから If 測定結果 Then などとあって、"測定結果"が変数なのかBooleanを返すプロシージャなのかすら直ぐには分からない。
328 名前:デフォルトの名無しさん [2020/04/15(水) 12:04:59.54 ID:tJWgJTOGM.net] それはエーゴでもかわらなくなくね?
329 名前:デフォルトの名無しさん mailto:sage [2020/04/15(水) 12:43:22.36 ID:9r3ObWq4r.net] >>32 「定義」ですぐわかる
330 名前:デフォルトの名無しさん mailto:sage [2020/04/15(水) 12:47:51.20 ID:9r3ObWq4r.net] 325の間違い
331 名前:デフォルトの名無しさん (ワッチョイ 77ce-Ho7r) mailto:sage [2020/04/15(水) 13:14:16 ID:Ikiffowr0.net] がっつり英語だと、こんどは辞書を引く作業が待ってることもある 発音がわからないと会話で困るし
332 名前:デフォルトの名無しさん (ワッチョイ 778f-Eg7/) [2020/04/15(水) 13:39:00 ID:zDLD/Qb60.net] 特定のURLのソースに任意の文字列が記載されているかどうかを判断したい。 https://auctions.yahoo.co.jp/seller/abcdfgh https://auctions.yahoo.co.jp/seller/zakattas https://auctions.yahoo.co.jp/seller/zafect789 というページのリストがあったとして、ソースに"停止中"もしくは"無効"の文字列が あるURLにはB列に"NG"と吐き出す、ということをやりたいです。 https://okwave.jp/qa/q6120067.html が近いんですが「2)一般的な文字列の場合」はエラーが出て動きませんでした。 VBAに詳しい人、よろしくお願いします。
333 名前:デフォルトの名無しさん (アウアウエー Sadf-Ho7r) mailto:sage [2020/04/15(水) 13:51:28 ID:5mkkxmmPa.net] grep なら一行でできるのに VBA でやらないといけないのか
334 名前:デフォルトの名無しさん (ワッチョイ bff7-pwY/) mailto:sage [2020/04/15(水) 13:53:51 ID:VtNtlccy0.net] 人に送ったら日本語フォントない海外PCで全く動かなくなったりしたな
335 名前:デフォルトの名無しさん (ワッチョイ 77ce-Ho7r) mailto:sage [2020/04/15(水) 14:13:32 ID:Ikiffowr0.net] >>330 参考リンク先のどのプログラムを試して、どの行でどんなエラーが出たか書いて エラーが出たままでCtrl+Cを押せば、エラーメッセージがクリップボードに入るから、それをコピペして あと、目的のWEBサイトの文字コードはちゃんと確認した?
336 名前:デフォルトの名無しさん (ワッチョイ 77ce-Ho7r) mailto:sage [2020/04/15(水) 14:16:13 ID:Ikiffowr0.net] >>331 まあ wget | nkf | grep のが簡単かもね
337 名前:330 (ワッチョイ 778f-o1R8) mailto:sage [2020/04/15(水) 14:42:43 ID: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