1 名前:1000 [2020/05/10(日) 13:43:45 ID:Nkoph0aj.net] ExcelのVBAに関する質問スレです コード書き込みや作成依頼もOK ※前スレ Excel VBA 質問スレ Part65 https://mevius.5ch.net/test/read.cgi/tech/1584430040/ ※デフォルト設定
259 名前:デフォルトの名無しさん [2020/05/24(日) 21:22:14.11 ID:xjag2nx7.net] >>247 馬鹿は死ねよ
260 名前:デフォルトの名無しさん mailto:sage [2020/05/24(日) 21:26:46.69 ID:YjTDgAdj.net] >>247 " "は文字列を表す
261 名前:デフォルトの名無しさん mailto:sage [2020/05/24(日) 21:29:42.85 ID:IJT9Ws79.net] >>247 C2からvolume個の連続データ(volumeは可変)を作りたいんだとしたら .AutoFill Destination:=.Resize(volume) とかどうやろね
262 名前:デフォルトの名無しさん mailto:sage [2020/05/24(日) 21:35:15.28 ID:IJT9Ws79.net] >>246 セマフォ(いわゆる排他処理)をエクセルでやるのか 実現するのは結構テクニカルになるね 仮にAccessが使えるなら使ったほうがすっきりするかと
263 名前:デフォルトの名無しさん [2020/05/24(日) 21:50:08.32 ID:8AgUd6nh.net] >>250 C2から始める場合はどうしたらいい?
264 名前:デフォルトの名無しさん mailto:sage [2020/05/24(日) 22:01:27.85 ID:IJT9Ws79.net] volume = Range("j5") With Range("c10") .AutoFill Destination:=.Resize(volume) これでだめ?
265 名前:デフォルトの名無しさん mailto:sage [2020/05/24(日) 22:42:24 ID:Ij6CWItZ.net] Volume = Range("J5").Value Range("C2").AutoFill Destination:=Range("C2:C" & cCtr(Volume)), Type:=xlFillDefault こういうことじゃね
266 名前:デフォルトの名無しさん mailto:sage [2020/05/24(日) 22:43:40 ID:Ij6CWItZ.net] × cCtr 〇 cStr
267 名前:デフォルトの名無しさん mailto:sage [2020/05/24(日) 23:13:25.93 ID:FPjhV5Sl.net] >>246 VBAでブックへの書き込みがないなら、外部から読み取り専用で開いてデータだけ頂いて処理する方法がある 例えばVBScriptならVBAからソースをコピペできる部分も多い 後はChangeイベントで変更が行われた時に、バックエンドとデータを同期する。 処理自体はバックエンドが行う。 サーバーは空いてるPCに(VBA
268 名前:ナ実行したければ)Excelをインストールして使えばいい。 [] [ここ壊れてます]
269 名前:デフォルトの名無しさん mailto:sage [2020/05/25(月) 03:36:22.58 ID:fpmiA/eB.net] セルに手入力してるんだから保存するんじゃね
270 名前:デフォルトの名無しさん mailto:sage [2020/05/25(月) 07:55:53 ID:2rkq/dFE.net] >>240 遅くなり申し訳ないです。説明が下手すみません。後でゆっくり読んで理解してみます。
271 名前:デフォルトの名無しさん mailto:sage [2020/05/25(月) 07:58:34 ID:2rkq/dFE.net] >>241 知らないコードあるので調べて見ます。
272 名前:デフォルトの名無しさん mailto:sage [2020/05/25(月) 13:23:07 ID:arQu/7J9.net] セルの入力規則の選択項目をコンボボックスのListindexみたいに番号抽出って出来ないんでしょうか
273 名前:デフォルトの名無しさん mailto:sage [2020/05/25(月) 15:12:23 ID:TkkoIJYG.net] できる
274 名前:デフォルトの名無しさん mailto:sage [2020/05/25(月) 15:21:07 ID:TNrQR7ea.net] "セルの入力規則の選択項目"と言っているのは、 データの入力規則ウインドウ−設定タブ−条件の設定について、 入力値の種類を"リスト"にしたときの"元の値"に入力した各値のこと? あとわざわざ番号で抽出する意味は? この"元の値"をVBAでセル(range)のプロパティから取得すると、だいたい下のどちらかのパターンのStringとなる。 1 "元の値"に入れたそのままのリスト用文字列(「a,b,c」など) 2 "元の値"に入れた参照セル範囲(「=$A$1:$A$5」など) 「番号抽出」とかいう言葉がよく分からんけど、上記で 1なら文字列を配列にするなどで解析して、セルの値(Value)で取得する 2なら参照先を取得して配列にするなどする とかで"元の値"を利用できるはず わざわざIndexを取りたいならその配列なりから取ればいい 目的がおかしくなってる可能性がある
275 名前:デフォルトの名無しさん mailto:sage [2020/05/25(月) 16:03:17 ID:WdAmw2Xs.net] >>260 Function validFormula(c as Range) '選択セルの入力規則式を取得(簡易版) validFormula = Evaluate(c.Validation.Formula1) End Function というユーザー定義関数を用意して =MATCH(A1,validFormula(A1),FALSE) の様な感じ
276 名前:デフォルトの名無しさん mailto:sage [2020/05/25(月) 16:41:06 ID:arQu/7J9.net] >>262 説明が下手ですいません やりたい事は以下のとおりです。 ?表示する場合 ・機器と通信して、通信データ読み出すとIndex(数値)が取得できる。(変更不可) ・取得値が1の場合、選択リスト要素が"aa,bb,cc,dd"とするとセルにはaaが選択される。 ?取得する場合 ・セルの選択リストの選択要素が"dd"だった場合、4を返すとなる ・Index=4を通信で送る コンボボックスだと楽に出来るのですが、セルを使った場合の対処に困っています。大量に項目があるのでコンボボックス一つずつ作成は対応できなくて。
277 名前:デフォルトの名無しさん mailto:sage [2020/05/25(月) 18:18:30 ID:pvRy3Vo6.net] PDF出力をするときに、ファイル名をBK19にして、同じフォルダ内の、 "納品書"というフォルダ内に保存したいのですが、保存場所が同じフォルダの同じ階層になってしまいます。 "納品書"フォルダに保存する方法をお願いします Dim PATH_ As String 'このブックと同じフォルダの"納品書"フォルダ 〜途中省略 PATH_ = ThisWorkbook.Path & "\" & 納品書 〜途中省略 sh.ExportAsFixedFormat Type:=xlTypePDF, Filename:=PATH_ & Range("BK19"), OpenAfterPublish:=False それと、ネット上のサンプルの中に、For文のNextの後の変数が書いていないものがありますが、どういう時に書かなくていいんですか
278 名前:260 mailto:sage [2020/05/25(月) 18:21:44 ID:arQu/7J9.net] 出来ました。
279 名前:デフォルトの名無しさん mailto:sage [2020/05/25(月) 19:12:11.07 ID:kYm8Dr+5.net] > PATH_ = ThisWorkbook.Path & "\" & 納品書 PATH_ = ThisWorkbook.Path & "\納品書"
280 名前:デフォルトの名無しさん mailto:sage [2020/05/25(月) 19:17:16.20 ID:0mNo0xGU.net] すみませんエクセルですが教えてください セルに2020/5/25と入っている。 2020/5/25(月)というテキストにしたい。
281 名前:265 mailto:sage [2020/05/25(月) 19:27:24.37 ID:pvRy3Vo6.net] >>267 試しましたが、納品書フォルダには保存されず、同じ階層に保存されてしまいます。
282 名前:デフォルトの名無しさん [2020/05/25(月) 19:32:32.8
] [ここ壊れてます]
283 名前:0 ID:RZDTWD0g.net mailto: >>268 セルの書式設定から表示形式をユーザー定義の yyyy/m/d(aaa) にする [] [ここ壊れてます]
284 名前:デフォルトの名無しさん mailto:sage [2020/05/25(月) 19:37:30.13 ID:voBvEsJz.net] ごめ PATH_ = ThisWorkbook.Path & "\納品書\" これは?
285 名前:265 mailto:sage [2020/05/25(月) 19:45:38 ID:pvRy3Vo6.net] >>271 ありがとうございます。納品書フォルダに入るようになりました。
286 名前:デフォルトの名無しさん mailto:sage [2020/05/25(月) 20:09:54 ID:0mNo0xGU.net] >>270 さらに、テキスト化は できますか?
287 名前:デフォルトの名無しさん mailto:sage [2020/05/25(月) 20:55:09 ID:+lR6vdzO.net] >>273 text関数
288 名前:デフォルトの名無しさん [2020/05/25(月) 21:16:44 ID:Xi2PhkBU.net] >>273 死ね
289 名前:デフォルトの名無しさん [2020/05/25(月) 21:40:54 ID:oBwL7wIu.net] >>275 この馬鹿モンが!
290 名前:デフォルトの名無しさん mailto:sage [2020/05/25(月) 22:09:44 ID:5DLeDpsM.net] dim sine as object
291 名前:デフォルトの名無しさん mailto:sage [2020/05/25(月) 22:59:11 ID:SN+Wx3Rt.net] Set sine = Nothing
292 名前:デフォルトの名無しさん [2020/05/25(月) 23:18:40.90 ID:jPur8MoZ.net] テンプレから複数作ってく場合テンプレの右にどんどんコピーしていって あとでテンプレシート以外を新しいブックに保存 これだとなぁ、おばちゃんがややこしいと文句言うかも 悩むなぁ
293 名前:デフォルトの名無しさん mailto:sage [2020/05/26(火) 10:12:12.68 ID:TGtSSAvG.net] ややこしや
294 名前:デフォルトの名無しさん [2020/05/26(火) 12:54:30.53 ID:aCjjmYBU.net] 所属してる部署や業務によってやりたい処理が違うから全部まんべんなく覚えていきたいという無駄な欲を捨てんといかんなぁ はぁぁ大学行かずに専門とかで情シス専攻すればよかった
295 名前:デフォルトの名無しさん mailto:sage [2020/05/26(火) 15:22:17 ID:QaHLpt3K.net] アホはしね
296 名前:デフォルトの名無しさん [2020/05/26(火) 15:33:26 ID:aCjjmYBU.net] 毎回それ言うためだけに見に来てるんなら 見なきゃいいのに
297 名前:デフォルトの名無しさん mailto:sage [2020/05/26(火) 17:01:22 ID:xe35/PQB.net] IT畑の人間は既存の業務フローを神聖不可侵な絶対的公理と考えてそれを自動化しようという発想をしがちだけど、それは注意が必要だと思うわ 自動化以前にそもそも無駄な業務って沢山ある 特にVBAで安易に自動化したくなるような業務はその傾向が強くて、現場の人間とちゃんと話せばあっさり消滅したりするもんだ
298 名前:デフォルトの名無しさん mailto:sage [2020/05/26(火) 17:18:49.31 ID:2eoVc4aq.net] 客の業務自体の改善に付き合うなんていうめんどくさい事はしないよ
299 名前:デフォルトの名無しさん mailto:sage [2020/05/26(火) 18:59:45.92 ID:LKm82hyE.net] 客じゃなくて自分の会社なんだろ
300 名前:デフォルトの名無しさん mailto:sage [2020/05/26(火) 19:26:44.98 ID:VDow7UZ6.net] これはおかしくね?と思っても依頼されたように作るしかない
301 名前:デフォルトの名無しさん mailto:sage [2020/05/26(火) 19:38:37 ID:4UYpyuwL.net] ああ、上司の命令ならな。 反論しろって? 10個の工程をPGが3工程くらいに短縮すると、理解できなかったりするんだよな。
302 名前:デフォルトの名無しさん mailto:sage [2020/05/26(火) 19:50:36.19 ID:e8iGmvo7.net] そりゃおまいさんが問題の分離ができてないのでは
303 名前:デフォルトの名無しさん mailto:sage [2020/05/26(火) 19:52:38.59 ID:MDEhHweB.net] 自社の業務改善って自分もしくは管理下の範疇でしかしないわな 責任取れる範囲でやらないと痛い目みるし、ドキュメントだ体制だルールだなんだ面倒だしな 基本周りは全部敵だよ
304 名前:デフォルトの名無しさん mailto:sage [2020/05/26(火) 20:18:36 ID:l4mmL3sO.net] そういう組織は長生きしないだろうな
305 名前:デフォルトの名無しさん mailto:sage [2020/05/26(火) 20:25:34 ID:EtaD8bXQ.net] >>230 Ruby で作ってみたけど、めちゃめちゃ複雑な仕様だった! 2020/05/21 〜 2023/02/12 を以下の、3つの期間に分けて、[0, 94, 5] となった! 〜2019/12/31 2020/1/1〜2022/12/31 2023/1/1〜
306 名前:292 mailto:sage [2020/05/26(火) 20:30:27.90 ID:EtaD8bXQ.net] 10日ごとの期間の数が、[0, 94, 5]
307 名前:デフォルトの名無しさん mailto:sage [2020/05/26(火) 20:41:03.58 ID:I81g2H63.net] 所定のフォルダの中に「AAA.xl
308 名前:唐」という名前のエクセルファイルがあった場合、そのファイルを削除し、 その後同一フォルダ内のエクセルファイルを「AAA.xlsx」というファイル名に変更する、という処理を しています。マクロ作成当初は問題なく処理できていたのですが、数日前からファイルを削除した後 実際にはエクセルファイルがあるにもかかわらず「エラー53 ファイルが見つかりません」とエラーが でるようになりました。終了ボタンを押してエラーウィンドウを閉じた後、同じ処理をすると今度は エラーが出ずに処理できます。 コード自体は変更していないのですが、このように実際には該当するファイルがあるにもかかわらず、 1度目(ファイル削除後ファイル名変更。ファイル削除処理は正常終了)はファイルが見つからずエラー、 2度目(削除するファイルがない状態でファイル名変更)は正常に処理が終了、となってしまう原因で なにか思い当たるものがある人いますか? 具体的には AAA.xlsx 20200526.xlsx ↓(AAA.xlsxを削除)←1回目はこの処理の後エラー53 20200526.xlsx ↓(ファイル名変更) AAA.xlsx となり、2回目は 20200526.xlsx ↓ AAA.xlsx で正常に処理ができます。 ファイル名変更は Name "*.xlsx" as "AAA.xlsx" で処理しています [] [ここ壊れてます]
309 名前:デフォルトの名無しさん mailto:sage [2020/05/26(火) 20:46:55.97 ID:VDow7UZ6.net] >>294 エラーが出るコードを見なきゃわからん
310 名前:デフォルトの名無しさん mailto:sage [2020/05/26(火) 21:22:32.89 ID:EtaD8bXQ.net] >Name "*.xlsx" as "AAA.xlsx" 何となく、この、* がヤバそうw
311 名前:デフォルトの名無しさん mailto:sage [2020/05/26(火) 21:32:47.20 ID:PZVl0MiE.net] プロパティのセットで配列や複数の引数を渡したいんだけど、送り手側の構文エラーにしかならない 調べても見つからないんだけど普通やらないの? Variantで宣言しておけば通るっぽいけど
312 名前:デフォルトの名無しさん [2020/05/26(火) 22:38:28 ID:3xGTmG1z.net] Sub テキストをエクセル() 'txtをエクセル化 With CreateObject("wscript.shell") .currentdirectory = "C:\" End With Application.Dialogs(xlDialogOpen).Show "*txt.*" End Sub 色々調べて作ってみたんですが テキストファイルウィザードのウィンドウが出て完了を押す という手間が残りやす… この手間をスキップというか直接Excelにデータ変換…教えてください
313 名前:デフォルトの名無しさん [2020/05/26(火) 23:46:26.84 ID:l/nHkMvV.net] また馬鹿が来た 馬鹿は何をやりたいかすら自分で把握すらしていないから馬鹿なんだよ
314 名前:292 mailto:sage [2020/05/26(火) 23:56:54 ID:EtaD8bXQ.net] >>230 Ruby で作ってみたけど、めちゃめちゃ複雑な仕様だった! https://paiza.io/projects/S4c8ZaTI3ii2SvkfgJ6gPw
315 名前:デフォルトの名無しさん mailto:sage [2020/05/27(水) 01:10:50.60 ID:bxZskA6m.net] >>291 組織なんて巨大になるほど無駄が増えていくもんだ
316 名前:デフォルトの名無しさん mailto:sage [2020/05/27(水) 15:11:46 ID:ILM8Kvmo.net] >>298 開きかたがそもそも違う
317 名前:デフォルトの名無しさん mailto:sage [2020/05/27(水) 20:47:31 ID:5ROZxNJ2.net] >>297 配列のプロパティは代入と同じくLet(値渡し)での宣言になる でも配列は参照渡ししかできないので矛盾が起きて渡せない(ByRel宣言しろと怒られる) Variantか、インスタンス変数をPublicにするか、Javaみたいにアクセスメソッドを作る SetterがあるならGetterもあるだろうからPublic宣言がいいんじゃないかな
318 名前:デフォルトの名無しさん mailto:sage [2020/05/27(水) 20:55:13.77 ID:trt6Afr5.net] 294です。エラーが出るコードは以下です -------------------------------------------------------------------- Sub 入力用フォルダ内の入力用ファイル削除() Dim myPath As String myPath = ThisWorkbook.Path & "\入力用\" '入力用.xlsxがすでに存在したら削除 If Dir(myPath & "入力用.xlsx") <> "" Then Kill myPath & "入力用.xlsx" End If End Sub -------------------------------------------------------------------- Sub 入力用フォルダ内のファイル名変更() Dim myPath As String Dim myFile As String myPath = ThisWorkbook.Path & "\入力用\" '事前にこのフォルダにファイルを入れておく myFile = Dir(myPath & "*.xlsx") Call 入力用フォルダ内の入力用ファイル削除 '前回の入力用.xlsxが残っていたら先に削除 Name myPath & myFile As myPath & "入力用.xlsx" 'ファイル名変更 ・ ・ -------------------------------------------------------------------- エラー53の際にデバッグボタンを押すと最後の
319 名前: Name myPath & myFile As myPath & "入力用.xlsx" の行が選択されているので。「myPath」内に「*.xlsx」がない、ということでエラーになっていると 思いますが、実際にはファイルはあるのでもう一度マクロを実行するとファイル名が変更される という状況です [] [ここ壊れてます]
320 名前:デフォルトの名無しさん mailto:sage [2020/05/27(水) 21:41:05 ID:d63wepvX.net] >>298 >色々調べて作ってみたんですが 他にもあったろうに、よくそんな奇抜な方法を見つけ出したなw そのインポートウィザード自体をマクロで記録して改造すればいいんだよ。
321 名前:デフォルトの名無しさん mailto:sage [2020/05/27(水) 22:17:38.57 ID:auut2Mwo.net] >>304 なぜエラーになった時のmyFileの値を確認しないの?
322 名前:デフォルトの名無しさん mailto:sage [2020/05/28(Thu) 09:11:03 ID:oSYrowbf.net] Dir関数って何でコレクション返さずに、あんな奇妙な実装なんだろ なんか訳があるのか
323 名前:デフォルトの名無しさん mailto:sage [2020/05/28(Thu) 09:41:03 ID:2MUNkHgk.net] >>307 ファイルが大量にあるとコレクション取得に時間がかかる イテレータがないVBAとかCだとDir()みたいな方式は珍しくないよ
324 名前:デフォルトの名無しさん [2020/05/28(木) 09:59:38.59 ID:8QzLeV6c.net] FDなんかでディレクトリエントリの順番変えて高速化とかの時代
325 名前:デフォルトの名無しさん mailto:sage [2020/05/28(木) 12:03:25.03 ID:u/WM2FVL.net] vlookupの参照値がエラーの場合に違うところに飛んでしまいます。エクセルの関数みたいにIFERROE(VLOOKUP(**,**,3,FALSE),"")みたいな処理をするためのコードを教えてください Dim bigcnt As Long Sub test() Dim Pagecnt As Long Dim rycnt As Long Dim syouhin As Long Dim Rowcnt As Long For Pagecnt = 1 To MaxPage Step 1 Range("DX8").Value = Pagecnt Rowcnt = 1 For tycnt = 12 To 30 Step 2 On Error Resume Next Range("K" & tycnt).Value = _ Application.WorksheetFunction.VLookup( _ Application.WorksheetFunction.VLookup(bigcnt,Sheets("uuu").Range("A:C"), 2, False) & "P" & (Pagecnt * 10) - 10 + Rowcnt, _ Sheets("list").Range("B:FU"), 107, False) Rowcnt = Rowcnt + 1 Next tyucnt
326 名前:310 mailto:sage [2020/05/28(木) 12:03:59.29 ID:u/WM2FVL.net] つづき Rowcnt = 1 For syouhin = 12 To 30 Step 2 On Error Resume Next Range("AC" & syouhin).Value = _ Application.WorksheetFunction.VLookup( _ Application.WorksheetFunction.VLookup(bigcnt, Sheets("uuu").Range("A:C"), 2, False) & "P" & (Pagecnt * 10) - 10 + Rowcnt, _ Sheets("list").Range("B:FU"), 63, False) Rowcnt = Rowcnt + 1 Next syouhina Next Pagecnt End Sub ↓のこの変でエラーがでると、次の処理が予測不能な参照値に飛びます bigcnt,Sheets("uuu").Range("A:C"), 2, False) & "P" & (Pagecnt * 10) - 10 + Rowcnt, _ "On Error GoTo 0"にしてもvlookupで参照できずにとまり、やはり予測不能な参照値に飛びます bigcntは正しい値に更新されていました
327 名前:デフォルトの名無しさん mailto:sage [2020/05/28(Thu) 12:27:26 ID:CwUX9Txr.net] next に変なカウンタつけるなよ
328 名前:310 mailto:sage [2020/05/28(木) 13:05:26.67 ID:u/WM2FVL.net] すみません。 rycnt→tycnt tyucnt→tycnt syouhina→syouhin
329 名前:デフォルトの名無しさん [2020/05/28(Thu) 13:15:00 ID:8QzLeV6c.net] 読む気無いけどvlookup使うのは高速化とかが目的? VBAerなら自分で探したほうが融通効かないか?
330 名前:デフォルトの名無しさん mailto:sage [2020/05/28(木) 13:28:52.23 ID:VMjOSmuX.net] 悪いけど、vlookup使う方がセンスいいと思うよ
331 名前:デフォルトの名無しさん mailto:sage [2020/05/28(Thu) 13:51:27 ID:EbwElpou.net] 俺もそう思う
332 名前:デフォルトの名無しさん mailto:sage [2020/05/28(木) 14:17:55.81 ID:fQiHMFwM.net] 正直まともに読む気がしなくなる ・誤字が多すぎてエラーにならないわけがない(手打ちしてるんだろ) ・シート上の範囲とかシート名、構成が不明すぎる ・同じく変数が不明すぎる(こちらはbigcntとかmaxpageとか全く知らない) ・何でデバッグで一時変数に入れるとかしないのか(二つめと四つめのVlookupは返り値とれるやろ。エラーがでるならそこかもしれんやろ、しらんが) ・なんでon errorはその二つしか試してないの、てかデバッグするなら回避しなければいいのに 速度求めるのにworksheetfunction使うのはいいけど、 こんな感じで雑に使うと可読性下がるから、そこは理解して
333 名前:ツかって [] [ここ壊れてます]
334 名前:デフォルトの名無しさん mailto:sage [2020/05/28(木) 14:35:32.74 ID:1No7OPPN.net] こんな感じかな Function myVLookup(lookup, tbl As Range, col As Integer, Optional flg = True) '個人的にはflg=Falsebノしたいけど On Error GoTo err1 myVLookup = WorksheetFunction.VLookup(lookup, tbl, col, flg) Exit Function err1: 'Debug.Print lookup, tbl.Address myVLookup = "" End Function
335 名前:デフォルトの名無しさん mailto:sage [2020/05/28(木) 14:55:35.18 ID:1No7OPPN.net] 訂正 × Optional flg=True ○ Optional flg=1 VBAだから、True=-1だっけ
336 名前:デフォルトの名無しさん mailto:sage [2020/05/28(Thu) 15:47:43 ID:A0D9Z3DQ.net] vbaerってなんでしょうか?
337 名前:デフォルトの名無しさん mailto:sage [2020/05/28(Thu) 16:26:49 ID:Xg+0aVY9.net] >>320 google.com/search?lr=lang_ja&q=vbaer
338 名前:デフォルトの名無しさん [2020/05/28(木) 17:23:33.07 ID:vsv+AImU.net] 測定系の部署だから エクセル関数でもリスト作ったりとかそういうのは使わないんだよぁ 計算系はすんげぇ使う
339 名前:デフォルトの名無しさん mailto:sage [2020/05/28(Thu) 17:32:02 ID:NxeE/SGI.net] 100万行以上ある表で特定の範囲に太字があるセルがある場合にTrueを返却したいのですが、 セルをループする以外で判定する方法はないでしょうか。 ループだと遅いので他の方法を探しています。
340 名前:デフォルトの名無しさん mailto:sage [2020/05/28(木) 17:40:50.70 ID:YLdey8mA.net] 太字で判定するしかない設計を見直す
341 名前:デフォルトの名無しさん mailto:sage [2020/05/28(Thu) 17:53:26 ID:6oAsq0wQ.net] >>323 俺も色やフォントでデータを判定する方式はExcelには向いてないから今すぐやめるべきだと思う とりあえず、名前を付けて保存、範囲指定で太字を解除してもう一度別名保存、ファイルサイズの比較
342 名前:デフォルトの名無しさん mailto:sage [2020/05/28(木) 18:24:58.06 ID:NxeE/SGI.net] >>324-325 私もすごくそう思います。ほんとアホな現場です。 vbaや関数で高速判定する術は無いということになりますかね…
343 名前:デフォルトの名無しさん mailto:sage [2020/05/28(木) 18:33:29.93 ID:1No7OPPN.net] 例えば、セルB1にして =GET.CELL(20,A1)*1 を LeftIsBold とでも名前定義 太字を確認したい列の右隣に、=LeftIsBold と入力して、それを合計する 遅いか速いかは知らないけど、Excel4.0マクロだから、ユーザー定義関数関数使うよりは早いと思う あと、文字単位の太字には未対応 太字で判定する設計が良くないのは同意
344 名前:デフォルトの名無しさん mailto:sage [2020/05/28(木) 18:44:24.85 ID:nu6DWAbq.net] ユーザーフォームを印刷したいんだけどA4横印刷で一枚に収まるように倍率変更って出来ない? ちょろっと調べると印刷設定に依存するとか書いてある。 吐き出し用のシートやらコード書くの面倒だし、フォームだけが印刷出来ればいいんだが本当に無理?
345 名前:デフォルトの名無しさん mailto:sage [2020/05/28(Thu) 19:09:14 ID:HPtbnCn7.net] >>328 1回PDFにして、PDFビューアの機能でA4フィット印刷 じゃだめ?
346 名前:デフォルトの名無しさん mailto:sage [2020/05/28(Thu) 19:19:51 ID:GEIkGrn6.net] >>326 XMLで読み込めば判るんじゃないの?
347 名前:デフォルトの名無しさん mailto:sage [2020/05/28(Thu) 20:56:43 ID:0S10FlCu.net] >>330 100万行のワークシートをXMLにするとデータ量が10陪ぐらいになることもあるから、たぶんワークシートをVBAで直接調べた方が早い
348 名前:デフォルトの名無しさん mailto:sage [2020/05/28(Thu) 21:21:26 ID:PIoPunSP.net] >>323 usedrangeの範囲を太字で検索してあればtrueは?
349 名前:デフォルトの名無しさん mailto:sage [2020/05/28(木) 21:44:10.77 ID:GEIkGrn6.net] >>331 じゃあXMLを自分宛てにメールで送って、Gmailで検索するのは? ってもうExcelじゃないわ。
350 名前:デフォルトの名無しさん mailto:sage [2020/05/28(Thu) 22:37:07 ID:0S10FlCu.net] >>333 ネットを経由したらもっと遅くなると思うぞ
351 名前:デフォルトの名無しさん mailto:sage [2020/05/28(Thu) 22:48:39 ID:0S10FlCu.net] >>323 100万セルのBoldプロパティを調べるコードを作って実験してみたけど数秒で終わったぞ 範囲が限られてるなら一瞬で終わるんじゃない? これより早くする方法はないと思うぞ
352 名前:323 mailto:sage [2020/05/28(Thu) 23:44:38 ID:AwZmzoZa.net] みなさんいろいろありがとうございます。 結局ループですることになりそうです >>335さんのコードと同じような気がしますが、その数秒〜十数秒が短縮できないかなと思ってました。 ありがとうございました。
353 名前:デフォルトの名無しさん mailto:sage [2020/05/29(金) 00:08:23 ID:QVnkNeSg.net] まあどう考えても>>324
354 名前:デフォルトの名無しさん mailto:sage [2020/05/29(金) 06:08:45 ID:OHJZg62K.net] 業務上100万件のデータ処理が必要なら専用のソフトを独自に作るべきだろう 初心者にVBAでやらせる上司が無能としか言いようがない 今までその業務手作業でやってたんだとしたらそのままのやり方続けていればいいんじゃね
355 名前:デフォルトの名無しさん mailto:sage [2020/05/29(金) 06:43:32.30 ID:z6j/3IlC.net] >>329 印刷出来れば構いません。
356 名前:310 mailto:sage [2020/05/29(金) 10:32:29 ID:I8K8veff.net] >>318 ありがとうございます。エラーを回避できました
357 名前:デフォルトの名無しさん [2020/05/29(金) 12:52:21 ID:UXGV4L+b.net] 物凄いコードを3つ 前スレで教えてくれたあの人たちが 今でもここを見てくれてますように
358 名前:デフォルトの名無しさん mailto:sage [2020/05/29(金) 12:59:11 ID:wRO7TzMi.net] >>323 その範囲.Font.Bold
359 名前:デフォルトの名無しさん mailto:sage [2020/05/29(金) 13:16:11 ID:I8K8veff.net] 指定したフォルダ内の"B"で始まるxlsファイルの"表紙"シートの各箇所を このブックの"comp"シートA〜C列の2行目以降に書き出していくコードを教えてください Dim path As String ,buf As String, i As Long Dim mysheet As Worksheet, srcbook As Workbook, srcsheet As Worksheet With Application.FileDialog(msoFileDialogFolderPicker)'フォルダを選択する If .Show = 0 Then MsgBox "キャンセルされました。" Exit Sub End If path = .SelectedItems(1) End With Set mysheet = ThisWorkbook.Worksheets("comp") buf = Dir(path & "B*.xls") Do While buf <> "" i = i + 1 Set srcbook = Workbook.Open(path + buf) Set srcsheet = srcbook.Worksheets("表紙") mysheet.Cells(i, 1).Value = srcsheet.Cells(3, 13) mysheet.Cells(i, 2).Value = srcsheet.Cells(5, 2) mysheet.Cells(i, 3).Value = srcsheet.Cells(7, 2) srcbook.Close False buf = Dir() Loop を試したのですが、だめでした