Excel VBA 質問スレ Part66

■ このスレッドは過去ログ倉庫に格納されています
11000
垢版 |
2020/05/10(日) 13:43:45.00ID:Nkoph0aj
ExcelのVBAに関する質問スレです
コード書き込みや作成依頼もOK

※前スレ
Excel VBA 質問スレ Part65
https://mevius.5ch.net/test/read.cgi/tech/1584430040/

※デフォルト設定
2020/05/24(日) 06:15:08.38ID:A7TYPIWJ
Ruby の、clamp みたいな関数だろ

clamp(min, max) -> object

self を範囲内に収めます。
self <=> min が負数を返したときは min を、 self <=> max が正数を返したときは max を、
それ以外の場合は self を返します

1.clamp(0, 100) #=> 1
101.clamp(0, 100) #=> 100
-1.clamp(0, 100) #=> 0
2020/05/24(日) 09:33:40.84ID:ozGH/zB/
やたらrubyで表したがるやつなんなの?
無意味だし完全にスレチなんだけど
2020/05/24(日) 09:52:14.39ID:tKHuSqSe
それこのスレの透明人間
2020/05/24(日) 09:56:21.27ID:Aun0kaOs
「おれRuby知ってるんだ(どやぁ)」

じゃね?
2020/05/24(日) 11:44:26.84ID:0I4G4YZw
>>238
え?たかだか一つ言語知ってるだけでどや顔なんて…ありえるかもな。
2020/05/24(日) 15:25:32.37ID:ZTIdhNvp
>>230
説明がよくわからない。
サンプルを用意するなど、読み手にわかりやすい工夫をすること。

(期間が複数あってよくわからん、期間の基準が上中下旬なのか2023/2/12みたいな細かい日付もあるのか、
 「この期間のセル数に」とか、36「マス」とか。
 自分で作ったような言葉を、相手はまず理解できないと思うこと。)


最大限理解しようとして作ってみた。

https://i.imgur.com/aYLnniP.png
https://i.imgur.com/Edwp9qW.png
2020/05/24(日) 17:31:52.38ID:aHD8sbyt
>>230
ひと月を3分割って、微妙に面倒だったりするね
質問は期間の求め方なので、こんな感じでいいと思う
簡単な流れは、月の差-1を出して*3し、開始と終了の日-1を10で割って半端な分を補正する感じ
計算上、初回分も算入する必要がある事に注意(例えば、 5/24 〜 5/24 の場合、単純に引くと0 になるから+1する必要がある)
あと、月の上中下旬単位でのみ考える(2/12 は2/20と同等に扱う)

Function kikan(date1 As Date, date2 As Date) As Integer
Dim res As Integer
res = DateDiff("m", date1, date2) - 1 'VBAでは単純な月の差なのでDay(開始日)>Day(終了日) となる場合を気にしなくていい
If res < 0 Then '同じ月
 res = min2((Day(date2) - 1) \ 10, 2) + 1
 res = res - min2((Day(date1) - 1) \ 10, 2)
Else
 res = res * 3
 res = res + 3 - min2((Day(date1) - 1) \ 10, 2)
 res = res + 1 + min2((Day(date2) - 1) \ 10, 2)
End If
kikan = res
End Function
Function min2(a, b) : min2 = IIf(a < b, a, b) : End Function

あと、各(月3分割)の均等割を出すとき、単純に等分した数値を次々加算していくと誤差が出る可能性があるので、その都度かけ算で計算しなおした方がいいよ
2020/05/24(日) 18:45:45.21ID:X8IGI7Pl
均等ではなくなることが分かっているのに均等割というのは一体
均等ではないなら分割の明確なルールと呈示するのが先だろうに
2020/05/24(日) 20:23:46.09ID:Ij6CWItZ
select case iDay
case 1 to 10
’上旬
case 11 to 20
’中旬
case else
'下旬
end select

こんなんでいいんじゃねーの
2020/05/24(日) 20:26:51.14ID:WNKMZrc1
理解ができるのがすげぇよ
俺には文章から何がしたいのか分からん
2020/05/24(日) 20:35:05.58ID:CLZ8mfOM
me,too
2020/05/24(日) 20:45:14.93ID:i+YVCLEB
セルに値を手動入力中にVBAから別のセルにアクセスがあるとエラー落ちするんだけど、非同期に処理する方法はないんかね。
VBA側はインターバルタイマーでデータ処理させてて、一方でユーザーはメモ入れたり諸作業したいんだ。
247デフォルトの名無しさん
垢版 |
2020/05/24(日) 20:46:27.53ID:8AgUd6nh
vb全然知らないんだけどサクッと教えてほしい

Range("C2").AutoFill Destination:=Range("C2:C804"), Type:=xlFillDefault
というオートフィル用をするコードがあるとする。
このコードの804部分はいつでも固定値だからセル内の数字を参照するような可変にしたい

一応このコードの前に
Volume = Range("J5").Value
として数字があるセルから数値をVolumeに得てるんだけど
このVolumeを804の部分に当てはめたい

どうしたらいい?
248デフォルトの名無しさん
垢版 |
2020/05/24(日) 21:22:14.11ID:xjag2nx7
>>247
馬鹿は死ねよ
2020/05/24(日) 21:26:46.69ID:YjTDgAdj
>>247
" "は文字列を表す
2020/05/24(日) 21:29:42.85ID:IJT9Ws79
>>247
C2からvolume個の連続データ(volumeは可変)を作りたいんだとしたら
.AutoFill Destination:=.Resize(volume)
とかどうやろね
2020/05/24(日) 21:35:15.28ID:IJT9Ws79
>>246
セマフォ(いわゆる排他処理)をエクセルでやるのか
実現するのは結構テクニカルになるね

仮にAccessが使えるなら使ったほうがすっきりするかと
252デフォルトの名無しさん
垢版 |
2020/05/24(日) 21:50:08.32ID:8AgUd6nh
>>250
C2から始める場合はどうしたらいい?
2020/05/24(日) 22:01:27.85ID:IJT9Ws79
volume = Range("j5")
With Range("c10")
.AutoFill Destination:=.Resize(volume)


これでだめ?
2020/05/24(日) 22:42:24.46ID:Ij6CWItZ
Volume = Range("J5").Value
Range("C2").AutoFill Destination:=Range("C2:C" & cCtr(Volume)), Type:=xlFillDefault

こういうことじゃね
2020/05/24(日) 22:43:40.18ID:Ij6CWItZ
× cCtr
〇 cStr
2020/05/24(日) 23:13:25.93ID:FPjhV5Sl
>>246
VBAでブックへの書き込みがないなら、外部から読み取り専用で開いてデータだけ頂いて処理する方法がある
例えばVBScriptならVBAからソースをコピペできる部分も多い

後はChangeイベントで変更が行われた時に、バックエンドとデータを同期する。
処理自体はバックエンドが行う。
サーバーは空いてるPCに(VBAで実行したければ)Excelをインストールして使えばいい。
2020/05/25(月) 03:36:22.58ID:fpmiA/eB
セルに手入力してるんだから保存するんじゃね
2020/05/25(月) 07:55:53.56ID:2rkq/dFE
>>240
遅くなり申し訳ないです。説明が下手すみません。後でゆっくり読んで理解してみます。
2020/05/25(月) 07:58:34.18ID:2rkq/dFE
>>241
知らないコードあるので調べて見ます。
2020/05/25(月) 13:23:07.69ID:arQu/7J9
セルの入力規則の選択項目をコンボボックスのListindexみたいに番号抽出って出来ないんでしょうか
2020/05/25(月) 15:12:23.39ID:TkkoIJYG
できる
2020/05/25(月) 15:21:07.89ID:TNrQR7ea
"セルの入力規則の選択項目"と言っているのは、
データの入力規則ウインドウ−設定タブ−条件の設定について、
入力値の種類を"リスト"にしたときの"元の値"に入力した各値のこと?
あとわざわざ番号で抽出する意味は?

この"元の値"をVBAでセル(range)のプロパティから取得すると、だいたい下のどちらかのパターンのStringとなる。
1 "元の値"に入れたそのままのリスト用文字列(「a,b,c」など)
2 "元の値"に入れた参照セル範囲(「=$A$1:$A$5」など)

「番号抽出」とかいう言葉がよく分からんけど、上記で
1なら文字列を配列にするなどで解析して、セルの値(Value)で取得する
2なら参照先を取得して配列にするなどする
とかで"元の値"を利用できるはず

わざわざIndexを取りたいならその配列なりから取ればいい
目的がおかしくなってる可能性がある
2020/05/25(月) 16:03:17.20ID:WdAmw2Xs
>>260
Function validFormula(c as Range) '選択セルの入力規則式を取得(簡易版)
validFormula = Evaluate(c.Validation.Formula1)
End Function
というユーザー定義関数を用意して
=MATCH(A1,validFormula(A1),FALSE)
の様な感じ
2020/05/25(月) 16:41:06.92ID:arQu/7J9
>>262
説明が下手ですいません
やりたい事は以下のとおりです。

@表示する場合
・機器と通信して、通信データ読み出すとIndex(数値)が取得できる。(変更不可)
・取得値が1の場合、選択リスト要素が"aa,bb,cc,dd"とするとセルにはaaが選択される。

A取得する場合
・セルの選択リストの選択要素が"dd"だった場合、4を返すとなる
・Index=4を通信で送る

コンボボックスだと楽に出来るのですが、セルを使った場合の対処に困っています。大量に項目があるのでコンボボックス一つずつ作成は対応できなくて。
2020/05/25(月) 18:18:30.74ID:pvRy3Vo6
PDF出力をするときに、ファイル名をBK19にして、同じフォルダ内の、
"納品書"というフォルダ内に保存したいのですが、保存場所が同じフォルダの同じ階層になってしまいます。
"納品書"フォルダに保存する方法をお願いします


Dim PATH_ As String 'このブックと同じフォルダの"納品書"フォルダ

〜途中省略

PATH_ = ThisWorkbook.Path & "\" & 納品書

〜途中省略

sh.ExportAsFixedFormat Type:=xlTypePDF, Filename:=PATH_ & Range("BK19"), OpenAfterPublish:=False


それと、ネット上のサンプルの中に、For文のNextの後の変数が書いていないものがありますが、どういう時に書かなくていいんですか
266260
垢版 |
2020/05/25(月) 18:21:44.47ID:arQu/7J9
出来ました。
2020/05/25(月) 19:12:11.07ID:kYm8Dr+5
> PATH_ = ThisWorkbook.Path & "\" & 納品書

PATH_ = ThisWorkbook.Path & "\納品書"
2020/05/25(月) 19:17:16.20ID:0mNo0xGU
すみませんエクセルですが教えてください

セルに2020/5/25と入っている。
2020/5/25(月)というテキストにしたい。
269265
垢版 |
2020/05/25(月) 19:27:24.37ID:pvRy3Vo6
>>267
試しましたが、納品書フォルダには保存されず、同じ階層に保存されてしまいます。
270デフォルトの名無しさん
垢版 |
2020/05/25(月) 19:32:32.80ID:RZDTWD0g
>>268
セルの書式設定から表示形式をユーザー定義の yyyy/m/d(aaa) にする
2020/05/25(月) 19:37:30.13ID:voBvEsJz
ごめ
PATH_ = ThisWorkbook.Path & "\納品書\"
これは?
272265
垢版 |
2020/05/25(月) 19:45:38.56ID:pvRy3Vo6
>>271
ありがとうございます。納品書フォルダに入るようになりました。
2020/05/25(月) 20:09:54.13ID:0mNo0xGU
>>270
さらに、テキスト化は
できますか?
2020/05/25(月) 20:55:09.30ID:+lR6vdzO
>>273
text関数
275デフォルトの名無しさん
垢版 |
2020/05/25(月) 21:16:44.80ID:Xi2PhkBU
>>273
死ね
276デフォルトの名無しさん
垢版 |
2020/05/25(月) 21:40:54.06ID:oBwL7wIu
>>275
この馬鹿モンが!
2020/05/25(月) 22:09:44.88ID:5DLeDpsM
dim sine as object
2020/05/25(月) 22:59:11.20ID:SN+Wx3Rt
Set sine = Nothing
279デフォルトの名無しさん
垢版 |
2020/05/25(月) 23:18:40.90ID:jPur8MoZ
テンプレから複数作ってく場合テンプレの右にどんどんコピーしていって
あとでテンプレシート以外を新しいブックに保存
これだとなぁ、おばちゃんがややこしいと文句言うかも
悩むなぁ
2020/05/26(火) 10:12:12.68ID:TGtSSAvG
ややこしや
281デフォルトの名無しさん
垢版 |
2020/05/26(火) 12:54:30.53ID:aCjjmYBU
所属してる部署や業務によってやりたい処理が違うから全部まんべんなく覚えていきたいという無駄な欲を捨てんといかんなぁ
はぁぁ大学行かずに専門とかで情シス専攻すればよかった
2020/05/26(火) 15:22:17.74ID:QaHLpt3K
アホはしね
283デフォルトの名無しさん
垢版 |
2020/05/26(火) 15:33:26.20ID:aCjjmYBU
毎回それ言うためだけに見に来てるんなら
見なきゃいいのに
2020/05/26(火) 17:01:22.50ID:xe35/PQB
IT畑の人間は既存の業務フローを神聖不可侵な絶対的公理と考えてそれを自動化しようという発想をしがちだけど、それは注意が必要だと思うわ
自動化以前にそもそも無駄な業務って沢山ある
特にVBAで安易に自動化したくなるような業務はその傾向が強くて、現場の人間とちゃんと話せばあっさり消滅したりするもんだ
2020/05/26(火) 17:18:49.31ID:2eoVc4aq
客の業務自体の改善に付き合うなんていうめんどくさい事はしないよ
2020/05/26(火) 18:59:45.92ID:LKm82hyE
客じゃなくて自分の会社なんだろ
2020/05/26(火) 19:26:44.98ID:VDow7UZ6
これはおかしくね?と思っても依頼されたように作るしかない
2020/05/26(火) 19:38:37.28ID:4UYpyuwL
ああ、上司の命令ならな。
反論しろって?
10個の工程をPGが3工程くらいに短縮すると、理解できなかったりするんだよな。
2020/05/26(火) 19:50:36.19ID:e8iGmvo7
そりゃおまいさんが問題の分離ができてないのでは
2020/05/26(火) 19:52:38.59ID:MDEhHweB
自社の業務改善って自分もしくは管理下の範疇でしかしないわな
責任取れる範囲でやらないと痛い目みるし、ドキュメントだ体制だルールだなんだ面倒だしな
基本周りは全部敵だよ
2020/05/26(火) 20:18:36.27ID:l4mmL3sO
そういう組織は長生きしないだろうな
2020/05/26(火) 20:25:34.60ID:EtaD8bXQ
>>230
Ruby で作ってみたけど、めちゃめちゃ複雑な仕様だった!

2020/05/21 〜 2023/02/12
を以下の、3つの期間に分けて、[0, 94, 5] となった!

〜2019/12/31
2020/1/1〜2022/12/31
2023/1/1〜
293292
垢版 |
2020/05/26(火) 20:30:27.90ID:EtaD8bXQ
10日ごとの期間の数が、[0, 94, 5]
2020/05/26(火) 20:41:03.58ID:I81g2H63
所定のフォルダの中に「AAA.xlsx」という名前のエクセルファイルがあった場合、そのファイルを削除し、
その後同一フォルダ内のエクセルファイルを「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"
で処理しています
2020/05/26(火) 20:46:55.97ID:VDow7UZ6
>>294
エラーが出るコードを見なきゃわからん
2020/05/26(火) 21:22:32.89ID:EtaD8bXQ
>Name "*.xlsx" as "AAA.xlsx"

何となく、この、* がヤバそうw
2020/05/26(火) 21:32:47.20ID:PZVl0MiE
プロパティのセットで配列や複数の引数を渡したいんだけど、送り手側の構文エラーにしかならない
調べても見つからないんだけど普通やらないの?
Variantで宣言しておけば通るっぽいけど
298デフォルトの名無しさん
垢版 |
2020/05/26(火) 22:38:28.15ID:3xGTmG1z
Sub テキストをエクセル() 'txtをエクセル化
With CreateObject("wscript.shell")
.currentdirectory = "C:\"
End With
Application.Dialogs(xlDialogOpen).Show "*txt.*"
End Sub

色々調べて作ってみたんですが
テキストファイルウィザードのウィンドウが出て完了を押す という手間が残りやす…
この手間をスキップというか直接Excelにデータ変換…教えてください
299デフォルトの名無しさん
垢版 |
2020/05/26(火) 23:46:26.84ID:l/nHkMvV
また馬鹿が来た
馬鹿は何をやりたいかすら自分で把握すらしていないから馬鹿なんだよ
300292
垢版 |
2020/05/26(火) 23:56:54.38ID:EtaD8bXQ
>>230
Ruby で作ってみたけど、めちゃめちゃ複雑な仕様だった!

https://paiza.io/projects/S4c8ZaTI3ii2SvkfgJ6gPw
2020/05/27(水) 01:10:50.60ID:bxZskA6m
>>291
組織なんて巨大になるほど無駄が増えていくもんだ
2020/05/27(水) 15:11:46.06ID:ILM8Kvmo
>>298
開きかたがそもそも違う
2020/05/27(水) 20:47:31.58ID:5ROZxNJ2
>>297
配列のプロパティは代入と同じくLet(値渡し)での宣言になる
でも配列は参照渡ししかできないので矛盾が起きて渡せない(ByRel宣言しろと怒られる)
Variantか、インスタンス変数をPublicにするか、Javaみたいにアクセスメソッドを作る

SetterがあるならGetterもあるだろうからPublic宣言がいいんじゃないかな
2020/05/27(水) 20:55:13.77ID:trt6Afr5
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の際にデバッグボタンを押すと最後の
Name myPath & myFile As myPath & "入力用.xlsx"
の行が選択されているので。「myPath」内に「*.xlsx」がない、ということでエラーになっていると
思いますが、実際にはファイルはあるのでもう一度マクロを実行するとファイル名が変更される
という状況です
2020/05/27(水) 21:41:05.84ID:d63wepvX
>>298
>色々調べて作ってみたんですが

他にもあったろうに、よくそんな奇抜な方法を見つけ出したなw
そのインポートウィザード自体をマクロで記録して改造すればいいんだよ。
2020/05/27(水) 22:17:38.57ID:auut2Mwo
>>304
なぜエラーになった時のmyFileの値を確認しないの?
2020/05/28(木) 09:11:03.73ID:oSYrowbf
Dir関数って何でコレクション返さずに、あんな奇妙な実装なんだろ
なんか訳があるのか
2020/05/28(木) 09:41:03.97ID:2MUNkHgk
>>307
ファイルが大量にあるとコレクション取得に時間がかかる
イテレータがないVBAとかCだとDir()みたいな方式は珍しくないよ
309デフォルトの名無しさん
垢版 |
2020/05/28(木) 09:59:38.59ID:8QzLeV6c
FDなんかでディレクトリエントリの順番変えて高速化とかの時代
2020/05/28(木) 12:03:25.03ID:u/WM2FVL
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
311310
垢版 |
2020/05/28(木) 12:03:59.29ID:u/WM2FVL
つづき

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は正しい値に更新されていました
2020/05/28(木) 12:27:26.72ID:CwUX9Txr
next に変なカウンタつけるなよ
313310
垢版 |
2020/05/28(木) 13:05:26.67ID:u/WM2FVL
すみません。

rycnt→tycnt

tyucnt→tycnt

syouhina→syouhin
314デフォルトの名無しさん
垢版 |
2020/05/28(木) 13:15:00.91ID:8QzLeV6c
読む気無いけどvlookup使うのは高速化とかが目的?
VBAerなら自分で探したほうが融通効かないか?
2020/05/28(木) 13:28:52.23ID:VMjOSmuX
悪いけど、vlookup使う方がセンスいいと思うよ
2020/05/28(木) 13:51:27.19ID:EbwElpou
俺もそう思う
2020/05/28(木) 14:17:55.81ID:fQiHMFwM
正直まともに読む気がしなくなる

・誤字が多すぎてエラーにならないわけがない(手打ちしてるんだろ)
・シート上の範囲とかシート名、構成が不明すぎる
・同じく変数が不明すぎる(こちらはbigcntとかmaxpageとか全く知らない)
・何でデバッグで一時変数に入れるとかしないのか(二つめと四つめのVlookupは返り値とれるやろ。エラーがでるならそこかもしれんやろ、しらんが)
・なんでon errorはその二つしか試してないの、てかデバッグするなら回避しなければいいのに

速度求めるのにworksheetfunction使うのはいいけど、
こんな感じで雑に使うと可読性下がるから、そこは理解してつかって
2020/05/28(木) 14:35:32.74ID:1No7OPPN
こんな感じかな

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
2020/05/28(木) 14:55:35.18ID:1No7OPPN
訂正
× Optional flg=True
○ Optional flg=1
VBAだから、True=-1だっけ
2020/05/28(木) 15:47:43.10ID:A0D9Z3DQ
vbaerってなんでしょうか?
2020/05/28(木) 16:26:49.63ID:Xg+0aVY9
>>320
http://google.com/search?lr=lang_ja&;q=vbaer
322デフォルトの名無しさん
垢版 |
2020/05/28(木) 17:23:33.07ID:vsv+AImU
測定系の部署だから
エクセル関数でもリスト作ったりとかそういうのは使わないんだよぁ
計算系はすんげぇ使う
2020/05/28(木) 17:32:02.90ID:NxeE/SGI
100万行以上ある表で特定の範囲に太字があるセルがある場合にTrueを返却したいのですが、
セルをループする以外で判定する方法はないでしょうか。
ループだと遅いので他の方法を探しています。
2020/05/28(木) 17:40:50.70ID:YLdey8mA
太字で判定するしかない設計を見直す
2020/05/28(木) 17:53:26.74ID:6oAsq0wQ
>>323
俺も色やフォントでデータを判定する方式はExcelには向いてないから今すぐやめるべきだと思う
とりあえず、名前を付けて保存、範囲指定で太字を解除してもう一度別名保存、ファイルサイズの比較
2020/05/28(木) 18:24:58.06ID:NxeE/SGI
>>324-325
私もすごくそう思います。ほんとアホな現場です。
vbaや関数で高速判定する術は無いということになりますかね…
2020/05/28(木) 18:33:29.93ID:1No7OPPN
例えば、セルB1にして =GET.CELL(20,A1)*1 を LeftIsBold とでも名前定義
太字を確認したい列の右隣に、=LeftIsBold と入力して、それを合計する

遅いか速いかは知らないけど、Excel4.0マクロだから、ユーザー定義関数関数使うよりは早いと思う
あと、文字単位の太字には未対応
太字で判定する設計が良くないのは同意
2020/05/28(木) 18:44:24.85ID:nu6DWAbq
ユーザーフォームを印刷したいんだけどA4横印刷で一枚に収まるように倍率変更って出来ない?
ちょろっと調べると印刷設定に依存するとか書いてある。
吐き出し用のシートやらコード書くの面倒だし、フォームだけが印刷出来ればいいんだが本当に無理?
2020/05/28(木) 19:09:14.00ID:HPtbnCn7
>>328
1回PDFにして、PDFビューアの機能でA4フィット印刷 じゃだめ?
2020/05/28(木) 19:19:51.07ID:GEIkGrn6
>>326
XMLで読み込めば判るんじゃないの?
2020/05/28(木) 20:56:43.74ID:0S10FlCu
>>330
100万行のワークシートをXMLにするとデータ量が10陪ぐらいになることもあるから、たぶんワークシートをVBAで直接調べた方が早い
2020/05/28(木) 21:21:26.06ID:PIoPunSP
>>323
usedrangeの範囲を太字で検索してあればtrueは?
2020/05/28(木) 21:44:10.77ID:GEIkGrn6
>>331
じゃあXMLを自分宛てにメールで送って、Gmailで検索するのは?
ってもうExcelじゃないわ。
2020/05/28(木) 22:37:07.33ID:0S10FlCu
>>333
ネットを経由したらもっと遅くなると思うぞ
2020/05/28(木) 22:48:39.38ID:0S10FlCu
>>323
100万セルのBoldプロパティを調べるコードを作って実験してみたけど数秒で終わったぞ
範囲が限られてるなら一瞬で終わるんじゃない?
これより早くする方法はないと思うぞ
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。