Excel VBA 質問スレ Part50 [無断転載禁止]©2ch.net

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん 転載ダメ©2ch.net (ワッチョイ 7e6d-ffY6)
垢版 |
2017/08/27(日) 12:40:17.57ID:LjjEWylk0
!extend:checked:vvvvv:1000:512

スレ立ての際は一行目に
!extend:checked:vvvvv:1000:512
と入れてスレ立てして下さい

ExcelのVBAに関する質問スレです
コード書き込みや作成依頼もOK

※関連スレ
VBAなんでも質問スレ Part2
http://mevius.2ch.net/test/read.cgi/tech/1432173164/
Access VBA 質問スレ Part1
http://mevius.2ch.net/test/read.cgi/tech/1328536426/
Excel総合相談所 126
https://mevius.2ch.net/test/read.cgi/bsoft/1496487719/

※前スレ
Excel VBA 質問スレ Part49©2ch.net
http://mevius.2ch.net/test/read.cgi/tech/1498410914/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
2017/09/24(日) 21:18:39.00ID:J5lzydll0
>>380,384

うーん、しょうがない。

これから大改造するか。
2017/09/24(日) 21:24:09.04ID:yAXo7hpi0
>>386

大改造になっちゃうの?それはすまない。
けど、
Function isほにゃらら() As Long
は、やはり美しくないよ。
2017/09/24(日) 21:26:50.23ID:J5lzydll0
いや、
大改造はわくわくする
2017/09/24(日) 22:16:54.54ID:SDtHFGLja
>>374
小学生に罵倒されれば誰でも頭に来る。
内容が無ければ尚更だ。
それに、小学生はきちんと躾ける主義でね。

バカにはちゃんとバカと言うべきなんだ。

質問に関係無いことしか書かないバカが人に対してここに来るななどと言う資格があるわけ無いだろう。
そんなことも分からないから小学生と呼ばれるんだ。
2017/09/24(日) 22:20:23.66ID:SDtHFGLja
>>381
Isで始まる名前を変えれば良いと思うのは俺だけ?
或いは戻り値はBooleanだけど引数をもう1つ用意して、そこに合計を返すとか。
391デフォルトの名無しさん (ワッチョイ af8b-Ncsu)
垢版 |
2017/09/24(日) 22:24:54.53ID:3BjqQEbI0
>>389
お前小学生にもバカにされてんのかwwww
最近の小学生もすてたもんでもないなw
2017/09/24(日) 22:29:18.40ID:SDtHFGLja
元の引数の値に合計を入れて返しちゃうのはさすがに変な気がするけど。
2017/09/24(日) 22:30:18.80ID:SDtHFGLja
>>391
ここまで言われて内容がまるで無いから呆れる。
百害あって一利なしだ。
394デフォルトの名無しさん (ワッチョイ af8b-Ncsu)
垢版 |
2017/09/24(日) 22:39:03.86ID:3BjqQEbI0
>>393
お?少しは謙遜の気持ちも芽生えてきたか?w
でもお前は百害どころか毒にも薬にもならんよw
だってバカなんだからw笑えるけどwww
2017/09/24(日) 22:52:38.60ID:z5Fx3/zG0
誰か助けてください。

今日一日かけて作ったマクロが、先程エクセルがクラッシュしてしまい自動修復が働き、マクロだけ消失してしまいました。

クラッシュ直後のxlsmファイルをZIPにして「vbaProject.bin」を取り出したりは出来たのですが、
新しいxlsmに取り込んでもやっぱり開くと修復で消えてしまうようで・・・

何とかしてソースコードを取り出すことはできないでしょうか・・。
2017/09/24(日) 23:42:55.80ID:ALrIElNwx
一日で作れるマクロなら大した分量じゃないだろうしもう一回同じコードを組めば良いんじゃね
2017/09/24(日) 23:52:01.97ID:y7FzpsGf0
>>395
こまめに保存しないとそういう目に合うという経験を得られてよかったね
次から気を付けないとね
2017/09/24(日) 23:53:04.05ID:z5Fx3/zG0
>>397
保存はしてあったんだが、ファイルそのものが破損してた。
定期的にExcel落とさないとダメみたいだね。
2017/09/25(月) 00:00:34.87ID:vsx3Rgi+0
>>398
自分はモジュールごと定期的に保存フォルダにドラッグ&ドロップしてる
いちいち「ファイルのエクスポート(E)...」とかしなくてもできることを知って楽になった。
2017/09/25(月) 00:01:40.54ID:AH/NDHtT0
>>398
確かにエクセルは保存をかけても終了するまで保存しないんだよな。たぶんXML形式にして保存する関係からだとは思うけど。
自動バックアップからなら修復の可能性はあるけど、マクロだけ消えたならそのファイル自体は元々マクロ書く前の状態なんじゃないかな。
2017/09/25(月) 00:02:16.67ID:Ch3TwtIS0
あはは、俺なんかそんなのしょっちゅうだぜW
ノリノリで良さげなコードが書けてる時に限って突然落ちやがるWW
もうね、マメに保存する癖を付けないとどうにもならないよね
2017/09/25(月) 00:05:47.41ID:PaZojpJN0
>>367
Orのヘルプに書いてある通り
True Or Null はTrue
False Or Null はNull
で、
CBool(2)はTrue
CBool(0)はFalse
なので、仕様通りの動作ではある

Orはどちらかが真なら真なので、片方が不定でも真だという理屈だな
ショートサーキットしないくせにな
どちらかが偽なら、もう片方に従うから、もう片方が不定なら不定
まあ、理屈として考えれば納得はできる
2017/09/25(月) 00:07:49.88ID:kbDcK8g50
>>396
朝から書き続けてたから1000行以上ある。かなりつらい。

何度同じような書いてもクラッシュするので原因を調査していたのですが、判明したので報告します。
Windows10 / Excel 2016

1.一番最初のコーディング中にクラッシュした原因
※そもそも取得のために引数にした配列を直接書き換えようとするのが間違いか。

↓下記変数を関数で生成
Dim fl() as string
call GetFileList(fl)
-----
function GetFileList(ByRef fl() as string)
Redim fl(1 to 123,1 to 1)
end function
-----

↓この構文を入力してEnter押すと必ずエクセルがクラッシュする。
ReDim Preserve fl(, 1 To 2)

↓正しいコード。これならクラッシュしない。
ReDim Preserve fl(LBound(fl) To UBound(fl), 1 To 2)

次レスへ続く
2017/09/25(月) 00:12:44.30ID:kbDcK8g50
>>403
2.クラッシュした後にマクロが消失した理由
とあるモジュール(*.bas)を取り込むと、上書き保存は問題なくできるのだが次回ブックを開いた時必ず「vbaProject.bin」が消失することが判明した。

クラッシュしなくなるまでの手順
@新規エクセルブックに移行
Aインポートしたbasのコードだけをコピーして新規モジュールに貼り付け
B下記のような定数があったので、FileSystemObjectのクラスと競合しないよう別の名前に変更
Enum flGetMode
File = 1
Folder = 2
All = 3
End Enum

Enum flGetMode
flFile = 1
flFolder = 2
flAll = 3
End Enum

>>399
そうだな・・・今度からエクセル落とす前にモジュールだけ取り出すことにするわ。

>>400
エクセル、マジ、怖い EMK

>>401
今回のはマメに保存するというより、ブックを別ファイルにバックアップしないと対処できないかな。
今度から毎時間スナップショット撮るようにするわ
2017/09/25(月) 03:13:19.89ID:eYOvRkV+a
>>394
よっぽどアホな質問して怒られたのが悔しかったのか?
碌にコードも書けないのに居残ってるってことはw
2017/09/25(月) 03:21:24.47ID:kQfKGPg6a
>>400
そうなの?
保存したのにされてないってのは経験無いなあ。

>>399
バックアップするマクロとか書いてたけどウィルス判定されることもあるし、最近はやってないわ。
2017/09/25(月) 03:26:59.82ID:kQfKGPg6a
>>404
列挙の場合、自分はメンバーの先頭にすべてenmを付けてるな。
昔、誰かがこれやってるの見てからは。
2017/09/25(月) 06:57:33.96ID:vsx3Rgi+0
ExcelがクラッシュするならWord VBAで書けばいいのに
(半分マジ)
2017/09/25(月) 07:18:55.09ID:CDmpdlRb0
>>399
ファイルのエクスポートってのは知ってるけど「モジュールごと」ってのは具体的にどうするんです?
2017/09/25(月) 07:24:22.76ID:dVWzg8Zn0
スプレッドシートで開いてみるとか
ファイル壊れてたらダメ化
2017/09/25(月) 07:25:07.82ID:5kCjH3U30
>>341
はっきり言おう
VBA自体が間口が広いために初心者が扱い易い言語ではあるが
大きなシステムやWeb系には向いていないために
全体から見れば「VBAの上級者」というのは
所詮井の中の蛙に過ぎない。

自称VBA上級者よりVBAの上級者じゃなくても
JAVAや.Netの知識を多少なりとも持っていて
そっちも出来るという方が基本的に給料が高いというのはそのせい。

つまりここで初心者がどうのと煽っている奴も
所詮は初心者の域を超えていない。
初心者が初心者を煽ってるだけ。
もっとも俺も自分を初心者じゃないなんてとても
おこがましくて言えないけどね。
2017/09/25(月) 07:25:18.87ID:8Tm148qB0
>>409
VBEのプロジェクトエクスプローラでモジュール名を右クリ
2017/09/25(月) 07:36:56.29ID:VZWzPiEFd
>>409
コードのコピペとか右クリからエクスポート(E)...じゃなくて直接ドラッグ&ドロップするの
2017/09/25(月) 07:48:23.85ID:dVWzg8Zn0
>>411
その話題はもういいよ
415デフォルトの名無しさん (オッペケ Sra3-Ncsu)
垢版 |
2017/09/25(月) 12:29:49.86ID:nP4bJmmCr
>>411
自分が初心者なら皆初心者に違いないってかw
賢いふりをしてるけどお前も>>341となんも変わらない無知を知らぬバカやぞwww
2017/09/25(月) 12:51:20.05ID:b3e1p2YsM
403だけど、会社のEXCELでも試してみたらやっぱりクラッシュする
redim aaa(,1 to 2)
まぁコードとしては間違いだから滅多にこんな書き方しないんだけどさ
でも
redim aaa(,1)
なら、ただのエラー(赤字)になるだけでクラッシュしないから納得行かないわ
一応MSには送っておいた。
参考まで。
2017/09/25(月) 13:08:28.70ID:eYOvRkV+a
>>411
JAVAや.netのできる上級者も多いと思うが。
というか、上級者は他の言語もできる奴が多いだろ。
主戦上がどこかというだけだし、そもそも主戦上だって他言語の人もいるだろ。

俺がどうあってもかなわないと思う人はVBA上でアセンブラ使ってるし。
実際、俺も大したレベルじゃないがCやJAVA、.netも書くしアセンブラも勉強中。

VBA使いだからといってレベルが低いわけじゃない。
2017/09/25(月) 14:27:01.66ID:VZWzPiEFd
>>417
VBA上でアセンブラ?
興味深いな
2017/09/25(月) 16:13:22.32ID:715ByDora
>>418
正確にはマシン語だね。
VBAとアセンブラでググれば見つかる。
マシン語のコードを変数に格納してメモリ操作して実行させる。

VBAの制限のために普通じゃ出来ないことをしようとする場合や普通に書くとどうしてもスマートじゃない場合に使う。
個人的に使いたい場面が2つ有るけど技術的に自分のものに出来て無いので使ったことは無いが。
2017/09/25(月) 20:21:50.79ID:VZWzPiEFd
>>419
確かに、ぐぐったらすぐに出てきたw
2017/09/25(月) 20:57:17.82ID:AH/NDHtT0
俺もマシン語とアセンブラ言語を勉強したなぁ。
早見表片手にバイナリ読むくらいのところまではいけたけど、
実際にメモリに転写して実行するとか手間が多すぎてあきらめたわ。

マシン語もシミュレータでOS作りに挑戦してHello Worldで止まってる。
2017/09/25(月) 21:10:50.83ID:um3WFj5Ia
>>419
これは駄目だないろんな意味で
2017/09/25(月) 22:14:52.84ID:715ByDora
>>421
VBA上でやる場合はアセンブラが主体じゃなくてVBAで出来ない部分だけに適用するわけだから、アセンブラ自体はそれほど複雑じゃないと思う。
自分の場合は別の言語でmemcmp使ったことがあって、それをVBAに移植する場合に使いたい。
ただ、そのプログラムをVBAで実現する意味が薄いように感じるのと別にmemcmp使わなくても代替あるかもしれないんで実際に組むかどうかは分からないんだけど。
2017/09/25(月) 22:22:34.05ID:eJeLm77Wd
なんでそんなにしてまで?
2017/09/25(月) 22:35:59.26ID:AH/NDHtT0
>>423-424
まぁそこまでするなら別の言語にした方がいいというか、そもそも発想が逆というか。

オフィス製品を拡張する上で「守られた」プログラミングが出来るのがVBAの特徴だし、
目的を絞っているから実用的なプログラムを短時間でくみ上げられるという長所があるのであって、
マシン語まで勉強してやるくらいなら、その手の目的で作られたC++言語辺りを頼るべきなんだよな。

もちろんそれが出来ない環境だから俺もマシン語を勉強するに至ったんだけど、
けっきょく型安全すら保証されない世界で何かを組み上げるってのは趣味の世界の話であってVBAの本質からずれてるしね。

ちなみに勉強中にC言語ですらマシン語で直接組むよりも非効率になる可能性が高いと知ったんで学ぶ意味はあったけど。
2017/09/25(月) 22:44:28.13ID:eJeLm77Wd
一体何の話をしているのか?
VBA補完というならC/C++で十二分だろうに
それで「実行環境がVBA」という気軽さは保てるんだし
2017/09/25(月) 22:52:54.75ID:715ByDora
>>424
自分はものにして無いので、そこまでしてない。
ものにしてる人にとってはそこまでしてなどと思ってないと思う。

別言語でdll作ってVBAから呼び出すことも出来るだろうけど、そこだけで完結しないのがスマートさに欠けるように感じるからかな。
2017/09/25(月) 22:54:34.22ID:AH/NDHtT0
>>426
確かに話がとっちらかって分かりにくくなったが、つまりそういう話をしてる。
でもVBA以外の環境を持てない職場なので仕方なくVBAが補完できる範囲だけでやるしかない。
その補完範囲にマシン語を含めるのはVBAの長所を殺しているのでVBAが想定している範囲の中で最善策を練るべきだと。

ちなみに個人的経験では次善の策としてSQLを使ったら地獄を見た。
2017/09/25(月) 23:12:01.96ID:FBvoBYTya
>>426
正解。

@まず保守性が酷い。都度ハンドアセンブルするのかって話。
Aラベルが付けられないからブランチ命令などは変更があったとき常にアドレスの相対位置を
設定し直さなければならない。ジャンプ命令みたいな絶対アドレス指定の場合はどうすんだろ。
B生産性が皆無
C中間言語を介在していないのでアーキテキクチャが異なるCPUでは使えない。

どうしてもアセンブラで組みたければC++のインラインアセンブラで素直にdllファイル作れって話。
こんなものどうやって普通にVBA組んでるやつに引き継ぐつもりなんだろうな。
出来ない環境でなければ設計自体を見直すか諦めろと。
2017/09/25(月) 23:14:24.47ID:eJeLm77Wd
>>429
引き継ぎとかは別にして、まず楽しいのかと
2017/09/25(月) 23:23:42.83ID:vsx3Rgi+0
>>427
完結ってどういう意味?
「VBA アセンブラ」でググって出てくるページ見ると、既存のcdecl関数を呼び出すことを目標にしてるみたいだけど、
自分はどっちかっていうと「なるべく自分で作ったもので間に合わせたい」という気持ちの方が強いな。
2017/09/25(月) 23:36:31.33ID:715ByDora
>>425
VBAでCのコード扱えれば良いんだけどね。
それに既にWin32APIで色々やってるし、その中には適切に使わないと危険なものもたくさんあるから、別に使っても良いと思うけど。

>>429
まず、アーキテクチャが異なるCPUについては既にWin32APIの時点で使えない。
それにアセンブラが主ではない。
memcmpの部分で使うだけで使う方は呼び出すだけだ。
2017/09/25(月) 23:39:50.62ID:715ByDora
>>431
例えばdllを作るとブックと一緒にdllがついてまわることになるでしょ。
ブックだけでは機能しないというのがちょっと...

ということ。
2017/09/25(月) 23:40:01.82ID:FBvoBYTya
>>432
>まず、アーキテクチャが異なるCPUについては既にWin32APIの時点で使えない。

は?何言ってるの?
2017/09/26(火) 04:06:23.87ID:DLk9dqRTr
VBAの環境なのにマシン語使ってやったぜー
ワイルドだろー
って自慢したいだけ
2017/09/26(火) 07:38:19.44ID:XImuzds2a
どっちにしてもトリッキーすぎて
実用的ではないな
437デフォルトの名無しさん (オッペケ Sra3-Ncsu)
垢版 |
2017/09/26(火) 12:18:09.16ID:YucCMyKYr
お前ら素直に感心する事も出来んのかw
惨めやのうwww
2017/09/26(火) 12:24:44.74ID:H2XQANIBa
関心する要素がない
439デフォルトの名無しさん (オッペケ Sra3-Ncsu)
垢版 |
2017/09/26(火) 12:27:34.92ID:YucCMyKYr
そうゆうひねくれた心を持っとるからいつまでたってもバカなんやで
2017/09/26(火) 12:28:28.01ID:H2XQANIBa
ちなみにどこに感心すればいいの?
機械語の知識が殆ど無いこと?
VBA上でごく中途半端な機械語を走らせる方法をネットで見つけたこと?
2017/09/26(火) 16:11:30.66ID:PIh5pWG1a
VBAだけじゃどうにもならない、別途dllとの込みで扱うのはスマートじゃない。
そういう場合に使える方法があるということ。
他にもこの方法を使えればプログラムがスマートになるのにという場面もある。
これはVBAの制限によるものだけれど。

もっとも殆どの場合、これを必要とするコードを書くような事態自体ない。

普通はVBAではこの機能は実現出来ませんと回答することになるだろう。
2017/09/26(火) 16:25:14.72ID:PIh5pWG1a
>>434
すまんね。
君がどういうレベルの話をしてるのか、いまいち掴めない。
実際、そういうことも分からないから勉強中なんでね。

アーキテクチャが違うCPUってのが何のことを言っていて、使えないCPUについて具体的にどうして使えないのか示して貰えるかな。
2017/09/26(火) 16:34:44.22ID:r3ztyMSNd
>>441
dll大好きマンの俺としてはその意見に賛成する事態自体ないな
2017/09/26(火) 16:47:20.57ID:w3seKs+r0
今どきアセンブラじゃないと
ダメな場面なんてほとんどない
速度が欲しいならC/C++で実用上十分
2017/09/26(火) 17:07:46.45ID:PIh5pWG1a
>>444
この場合は速度とか関係無いんで。
Cとかでも確かに外部dllを作れば可能だけど。
まあ、でもdll作る方が正論だわな。

問題は自分の望むdll作る能力が自分に無いことだね。
2017/09/26(火) 17:14:42.90ID:w3seKs+r0
VBAだけで実現できない機能があるならDLLでいい
今どきのWindowsでアセンブラなんてまず必要ない
2017/09/26(火) 17:49:18.96ID:r3ztyMSNd
Visual Studio利用が前提ならdll作るのに大した苦労はいらないぜ。
Expressでもいいんだしな。
448デフォルトの名無しさん (ワッチョイ 4ab3-UH40)
垢版 |
2017/09/26(火) 17:59:29.96ID:BLiEZOQr0
アドインを入れろというだけで嫌がられるのに・・・。DLLなんて言った日にゃ「何それ食えるの?おいしいの?」ってなもんで。
更にregsvr32で登録とか説明した途端「そんなメンドくさい事をやらずに出来ないの?」とかぬかされてムカついた今日此の頃
2017/09/26(火) 18:41:21.08ID:w3seKs+r0
いやDLLが嫌がられてるからって
毎回アセンブラで書いてたら
「これだけのことにそんな時間掛かるの?」とか
文句が変わるだけだろ
2017/09/26(火) 18:51:12.32ID:fvF/8EVL0
dllの登録とかはグループポリシーとスタートアップスクリプトで処理すればいいよ
2017/09/26(火) 19:29:03.17ID:r3ztyMSNd
>>450
絶対パスは?
2017/09/26(火) 19:33:40.39ID:PUkdjjHv0
>>448
ふざけてんなら教えてやんねぇから自分でやれ って言ってやれ
2017/09/26(火) 19:48:34.37ID:r3ztyMSNd
シートをSQLでアクセスしたあとどうも変なことが起こる。
あしたデータをDBに入れてからSQLでアクセスして同じ現象が起きたら自分のプログラムミスだろうけど、
起きなければODBC for Excelを疑ってしまいそうだ
2017/09/26(火) 21:26:46.77ID:XImuzds2a
まぁdllくらいは面倒くさがらず設定出来ないとな。
今後デプロイ作業とかやるようになったらそれどころじゃないしな。
455デフォルトの名無しさん (ワッチョイ af8b-lQLN)
垢版 |
2017/09/26(火) 22:11:26.14ID:Crd6WL0Z0
結局自分の知識を言いたいだけのお前らw
ババアの井戸端会議より無法地帯だなw
2017/09/27(水) 01:51:50.87ID:0UMyaADl0
BBA → 高い化粧品を使っている
VBA → アセンブラを使っている
結論 → どっちもムダ
2017/09/27(水) 08:43:06.78ID:HoC7JNpT0
VBAに不足してるのは主にGUIの部分であって、仕様上実現できない機能なんて相当高度な、それこそVBAでやるべきではないような大がかりなものだろ。
2017/09/27(水) 08:45:17.97ID:HoC7JNpT0
>>453
せめて何が起こったのかぐらい書けよ。
まあ十中八九お前の勘違いだろうけど。
2017/09/27(水) 08:51:33.31ID:0UMyaADl0
>>457
そうだな
VBAで不足してる部分は
C#でやればいいことで

VBAにアセンブラ載せるなんて
原チャリにロケットエンジン
載せるようなイビツさ
2017/09/27(水) 09:32:39.24ID:xHL8iwO20
またソースも示さずエラーコードも示さずただエラーだ!エラーだ!って喚き散らすだけの人間が
2017/09/27(水) 09:53:24.11ID:rapuPXM40
      |三|
     /_____\
     |ギコーマン|
     |___醤油_|
     ,>:::(,,゚Д゚) <呼んだ?
     |(ノ.::::::::: |つ
     |:::::::::::::::::|
     ヽ___/
      U"U
2017/09/27(水) 09:53:37.56ID:p6CZNfKJx
>>460
偉いよね
2017/09/27(水) 12:19:47.02ID:OxJDgjzEa
>>457
もういい加減やめるけど、そのGUI部分で貧弱なMSForms使わずにCreateWindowExで組んでたりした。
んで、いろんな部品のクラス化とかを考えるわけ。
ところがどうしても制限でクラス内に置けないものがあるんでカプセル化が不十分なんだ。
それをアセンブラ使ってクラス内に置いてる人がいるもんですごいなあと。

アセンブラ部分だけdllにしても寧ろ中途半端。
各部品ごとdllにしないとね。
流石にそこまでの能力も無いし労力も割きたくない。

まあ、所詮VBAなんてダメ言語ってことかね。
2017/09/27(水) 13:00:28.04ID:/eBNIii1d
>>458
すまない
エラーが色々あってそう単純じゃなくてついね。

例えば配列になるはずの変数Aを扱っててエラーが出たので内容を見ると
TypeName(A) = Empty かつ IsEmpty(A) = Trueなのに
Debug.Print A とやると
「Visual Basicでサポートされていないオートメーションが変数で使用されています」とか

調査中
2017/09/27(水) 13:16:32.50ID:PSADxl6o0
俺の場合はもっと根本的な部分を高速化する事が狙いでマシン語を使おうと思っていたな。
If文一つ、ループ処理一つ取っても汎用化の関係で無駄な処理が挟まる事になるんで、
極々単純かつ処理時間に占める割合が大きい計算なんかをマシン語で書ければ処理速度がだいぶ違う。

C++言語がインラインアセンブラを備えているように、どうしてもマシン語かそれに近しいものじゃないと実現出来ない事がある。
2017/09/27(水) 17:03:57.20ID:+G+JcjrGM
はじめまして。
Excel2013を使っています。

色振分けについて

https://kokodane.com/2013_waza_064.htm


関数はちゃんと反映するけど処理が重い、、、。
VBAにしたけどエラーになる、、、


関数

=MOD(INT(SUMPRODUCT(1/COUNTIF($C$9:$C9,$C$9:$C9))),2)


VBA

i = Int(WorksheetFunction.SumProduct(1 / WorksheetFunction.CountIf(Range("C9:C" & j & ""), Range("C9:C" & j & "")))) Mod 2


「CountIf(Range("C9:C" & j & ""), Range("C9:C" & j & "")」のところでエラー発生…。

何か間違っているのでしょうか・・・。
2017/09/27(水) 18:10:37.79ID:pdVv0yF3M
>>466
VBAのユーザー定義関数使っても条件付き書式の仕様上、軽くなることはないと思う
Sheetモジュールのイベントでセル塗りつぶしするようにコーディングすることをおすすめする
2017/09/27(水) 18:27:20.02ID:60RbULmH0
>>466
対象の行に存在する値のみで判定すれば軽くなるんじゃない?
その関数だと行が増えるに従って遅くなる
2017/09/27(水) 18:33:40.97ID:PSADxl6o0
>>466
Sub foo(ColorColumn As Range, ColorNum As Long)
Dim r As Range
Dim cols As Boolean
Dim c As Collection: Set c = New Collection
col = ColorColumn.Value
For i = LBound(col, 1) To UBound(col, 1)
If x <> col(i, 1) Then
x = col(i, 1)
If cols Then cols = False Else cols = True
End If
If cols Then
If r Is Nothing Then
Set r = ColorColumn(i, 1)
Else
Set r = Union(r, ColorColumn(i, 1))
End If
End If
Next
r.Interior.Color = ColorNum
End Sub

エラーについては具体的なコードがないから分からないけど、
そのページの様な色分けやるならこんなコードとかの方がいいと思う。
2017/09/27(水) 20:58:26.69ID:aEqZdwF3a
>>466
jと""が気になった
2017/09/27(水) 21:01:26.56ID:WtGXLehDa
アセンブラやマシン語のことを神格化してる人がいるけれど
このスレにだって昔使ってた人もいるだろうし
ある意味覚えることが少ないからObject指向言語や関数型言語より簡単かも知れない。

でも昨今仕事上その知識が必要になることはまず無い。
いつまでも無用の長物にしがみついていないでその分別の勉強に力を配分した方が賢いとは思う。
2017/09/27(水) 21:01:48.90ID:ZXhzFeMta
>>466
そういう書き方をするなら下記のようになると思う。

i=EVALUATE("MOD(INT(SUMPRODUCT(1/COUNTIF(C1:C" & Cstr(j) & ",C1:C" & Cstr(j) & "))),2)")

でも、これは関数が分かってて、関数からアプローチした場合。
普通は自分も>>469のようにするだろう。
エラーになってたのはSUMPRODUCTが配列の積を計算する関数なので、その中のCountIfを分解出来ないからかな?
2017/09/27(水) 21:07:50.10ID:ZXhzFeMta
>>471
神格化なんてしてねーよ。
XBAじゃ出来ないから仕方なくだ。
出来るならやってる。

じゃ、C#やVB.netでライブラリ作るとしても、結局中途半端になるということ。

VBAでオブジェクト指向なんてやんなきゃ良かった。
2017/09/27(水) 21:22:44.64ID:WtGXLehDa
>>473
一般的にはある程度知識がついてきたら
用途にもよるけど絡みがある場合はC#やVB.Net側からEXCELの操作を行うもんだと思う。
2017/09/27(水) 21:34:59.84ID:60RbULmH0
そのCOUNTIF使ったやり方はデータがN行増えれば
計算量がNの2乗倍増えるんだからどうやっても遅いよ
行が増えても1行あたりの計算量が増えないようにしておけば
そこまで遅くはならない

[例]
B    | C | D
-----------------
     | 0 |
コーヒー | 1 | 1
コーヒー | 1 | 1
コーヒー | 1 | 1
お茶   | 2 | 0
お茶   | 2 | 0
紅茶   | 3 | 1

C列は =IF((IF(B3=B2, 0,1))=1, C2+1, C2)
D列は =MOD(C3, 2)
2017/09/27(水) 22:00:35.20ID:L69K1Ov+0
>>471
>でも昨今仕事上その知識が必要になることはまず無い。
ここはVBAスレだからそうだな
477デフォルトの名無しさん (ワッチョイ af8b-lQLN)
垢版 |
2017/09/27(水) 22:10:23.63ID:9IoMVu120
お前ら何があっても絶対に>>474の様にはなるなよ
お前らには.Netでエクセルをいじるくらいなら肥溜めに突っこんだ手でちんこいじった方がなんぼかましだという事を知ってほしい
2017/09/27(水) 22:42:42.85ID:XaTneppSa
Dim co As ChartObject

With co.Chart.SeriesCollection.NewSeries
.Name = "テスト"
.XValues = tmpArray1 'X軸
.Values = tmpArray2 'Y軸
End With


With co.Chart

' 線形近似式の取得
.SeriesCollection(1).Trendlines.Add Type:=xlLinear
.SeriesCollection(1).Trendlines(1).DisplayEquation = True'☆☆☆
.SeriesCollection(1).Trendlines(1).Select
.Refresh

getAlfa = Replace(SeriesCollection(1).Trendlines(1).DataLabel.Text, " ", "") '★★★

End with

for文の中でこれを利用して100個ほどグラフを作っているところです。
線形近似式を作るまでなら出来たのですが、
近似式を取得しようとすると、★★★のところで
「プロシージャの呼び出し、または引数が不正です」となります。

ステップインでやるとエラー無く通るので、☆☆☆の反映が遅いのか・・?
と、よく分からなくなっております。ご助言頂けますと幸いです。
2017/09/27(水) 23:13:25.41ID:WtGXLehDa
>>477
理由は?
2017/09/27(水) 23:23:42.05ID:PSADxl6o0
COMをVBA以外から触るのってくっそ面倒なんだっけか。

確かに一度そういう記事を見たときに引数省略できないわ明示的に解放しないとメモリリークするわで、
下手に外部から弄るよりVBAだけの方が良さそうとは思ったな。
2017/09/28(木) 07:45:23.83ID:6Dj75AXHa
>>480
それはCOMからEXCELを操作しようとするから。
npoi辺りを使えば問題ない。

https://qiita.com/midori44/items/acab9106e6dad9653e73
2017/09/28(木) 18:09:24.72ID:v+KWuCPna
このスレ読むとVBAerの苦悩を感じてしまうな
483デフォルトの名無しさん (ワッチョイ 4d8b-6Ovz)
垢版 |
2017/09/28(木) 20:48:58.21ID:IZ7vMKly0
ところでさあ、お前らの中で「ボクはVBAerじゃない!」ってのが唯一の心の拠り所の人っている?…あ、いたwwww
2017/09/28(木) 20:54:21.56ID:gXNMpsXl0
>>482
20年も経つし、いい加減かなりめんどくさい上、元々の設計からして奇々怪々
2017/09/28(木) 21:05:52.30ID:buJERvd40
古いブックのデータを、新しいブックに移すだけで容量が変わる仕様は酷いよな。
2017/09/28(木) 21:14:44.53ID:0/cKan+O0
うちの会社の情報システム部の人達、VBAばかり使ってるんだけど、これってシステム屋さんとしてどうなの?

変な質問でごめんね〜
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況