Excel VBA 質問スレ Part52
■ このスレッドは過去ログ倉庫に格納されています
スレ立ての際は一行目に
!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 VBA 質問スレ Part51
http://mevius.2ch.net/test/read.cgi/tech/1510107990/ 正直、型宣言文字の何が弊害なのかよくわからない
今は使ってないけど昔は使ってて、これといった害はなかったからね Dimとか無しでコードの途中で自然に宣言できるので、
HowTo本に出てくる伝説の存在「全ての変数が最初に書かれていないとコードの読解に支障を来す勢」にとって不利なんじゃない? >>800
ああなるほど
Dim a&
みたいな使い方しかしてなかったから無縁だな
しかしすべての変数が冒頭になきゃいけない人たちって、Exit Function や Exit Sub のあとに出てくる変数も
そうなのかね? 初めて知ったがこれはむしろC#のvarみたいで必要な機能だよなこれ(同じだよな?)
問題は変数名$っていう目に優しくない文法だけだ >>801
そんなんモジュールの先頭にまとめるだろ
関数定義の後に出てくるモジュール変数とか鳥肌が立つわ テキストファイルをline inputでループして自分の名前が入っていたら、エクセルに張り付けていきたいんですけど、その際に抜き出した行を消してテキストファイルを更新して、最終的には自分の名前のないテキストファイルにするにはどんな作り方ですか? 抜き出さなかった行を別のファイルに追記していく
最後に元ファイルけして、別ファイルを元ファイルにリネームする N88-BASICもマイクロソフト製だったから、文字列変数には$、倍精度実数は#を付けるとか、当時は必須の知識だった
ところでDEFINTはVBAでも使えるんかな? ファイルの拡張子をBakにする
それを読んで必要な行を元のファイル名に出力する
これで必要な行が無ければファイルも消える >>809
更新する必要がないときにファイルを更新してしまうのは下策中の下策 >>805
数百MBあるようなファイルじゃなければ、
一括で文字列として読み込んで
一行ずつ処理して出力用の新しい文字列を組み立てて
読み込んだ文字列と新しい文字列に差分があれば
ファイルに一括で書き込むのが
性能面でも処理の分かりやすさでも優れてるよ 更新する必要がないのに更新されてしまったら
それは下策ではなくバグやぞ 初歩的な質問で恐縮なんだが
もしかしてマクロってやりたい事をコードでできる要素に分解するのが難しいのか?
俺はてっきり文法的な難しさが勝ると思ってたが、
実務に落とし込もうとした時に、この作業をどうやってコードに起こそう?ってフリーズしたわ そうだよ
VBAはエクセルを使った作業を助けるちょっとした拡張を書く分には適してる
でもそれ以外のエクセル関係ない処理を書くのにはお世辞にも向いてるとは言えん
そんで業務上で実用的な処理って殆どはエクセル関係ないんだよね はいはい、他の言語勧めるならVBA使う職場でIDE入れる許可取る方法も合わせて紹介してくださいね IDEなんていらんよ
WindowsならPowerShellが使えるからね インテリセンス無しで書くって状況を効率的と称するのはちょっと現実見えてないどころの話じゃないな >>818パワーシェルでスクリプト走らすための設定をするのが面倒っていうか、いちいち覚えてらんない
スクリプトを走らすための設定をするスクリプト無いのかなぁ >>812
理解力無さすぎ
(ファイルの内容を)更新する必要がないのに(ファイルの更新日時が)更新されてしまったら
って話な >>822
理解力無さすぎ
タイムスタンプが変わるのはファイルの更新ではない
って皮肉やぞw ちょっとなに言ってるのかわかりませんな
皮肉の意味も知らなさそうw エンジニアって言葉に違和感がある
VBAユーザーとかにしてくれ 悲報、VBAエンジニアさん皮肉を理解できないwww エクセル関数で出来る事は全てマクロでも出来ると思っていいのかな
今VLOOKUPを大量に使って元データのシートを4,5枚のシートに分けて転記してる作業があって、
このブック自体、ある意味完成されてるから業務上特に問題はないのだが
セルの中身を見ると酷く不恰好でな
背中がムズムズするから改善したいと思ってる >>829
関数はVBAで組まれているので、十分な理解の元でマクロを組めば同処理同時間になる。
それにマクロの方が無駄な機能を省くなど最適化しやすいので、処理時間は普通、 関数≧マクロ になる。
最近のバージョンだと関数はSIMD使ってたりセル単位で並列処理してたりと、
マクロで出来ない事やってるとは聞くんだけど実際問題処理時間に反映されてないんだよね。 >>831
> 関数はVBAで組まれているので
そんな珍説初めて聞いた >>832
珍説も何もMSDNに書いてあった事だからなぁ
最近のバージョンだと違うのかもしれないけど VBA マクロを外部 dll にて記述することは可能ですか?
VBA マクロから外部 dll を呼び出すことは可能ですか?
VBA の関数を外注したいのですが >>836
VBAのdll化ってのは聞いたことがないな
同等の機能をC++とかで書ければそれをdll化すりゃいいけど sheetオブジェクトさわれないと不便だろうからc#+OpenXML でdll作れば? >VBA マクロから外部 dll を呼び出すことは可能ですか?
圧縮用に unlha32.dll を使ってる。セキュリティがどうのこうの言われてたりしたけど
まぁ自分用途に使う分には問題ないし外部dllを呼び出せるか?って質問に呼び出す
例としてあげただけなんで。 >>836
Module1.bas のまま納入してもらえばいいじゃん。 VBAの仕事って何だよ
エロ画像の整理とかで圧縮ファイル扱うしun*32.dll系はむしろよく使うんじゃないの >>841
投資分野における RSIインディケーターをexcel 数式で使いたいのです >>844
それはファンクションプロシージャでラッピングすればいい話で、VBAの話ではない。 >>844
そんなんだったら関数本体はVBAもExcelも関係ない汎用的な言語で処理を書けるから、
VBA用のインタフェースを備えたDllを作るのは割と簡単な仕事だろうね。 VBAerは世界感が狭いからなんでもVBでやろうとするなぁ 開発環境をインストールできない環境では
VBAぐらいしか選択肢がない エクセルは統計に使う関数が一通り揃ってるんで投資分野は使いやすいぞ
インジケータならMT4とか使った方がいいような気はするけど >>807
88世代でもそこはN-BASICと言って
ジジイっぷりを発揮するべき >>847
エクセルで指定されたシートの範囲を dll にて取り出す方法がわかりません >>851
むしろエクセルはまともに統計に使える関数少ないだろ。重回帰くらいしかない。
相関行列や時系列分析なんかないし。自分で作るしかない
しかもエクセルじゃビッグデータは重すぎて、全体的な見通しも悪い。 他の選択肢を知れば知るほどもうVBAはねえわってなるよね普通
VBAに執着する人ってどんだけ勉強嫌いなんだろう >>853
VBAでシートから配列に変換してdllに渡す
計算結果は配列でVBAに返す
dll側はシートなどのExcelオブジェクトと切り離す >>855
そんな事言うためにこのスレに留まってるの? フォルダAにある現在開いているファイル以外のファイルをフォルダBにコピーし、
その後、フォルダAにある現在開いているファイル以外を削除する方法を教えていただけますでしょうか。
よろしくお願いします。 >>858
Dim fn as String
fn = Dir(ThisWorkbook.Path & "\")
Do While Not fn = ""
If Not fn = ThisWorkbook.Name Then
Name ThisWorkbook.Path & "\" & fn As "フォルダBのパス" & "\" & fn
End If
fn = Dir()
Loop
これでどうかな
実験してないのでこけるかも知れない >>859
ありがとうございます。
理想としていたことができました。 >>848
ヴィーバアーって読むん? それともビーバー? ブック1のシート1とブック2のシート2を開いてシート2がアクティブの時、
シート1の選択範囲を取得する方法はありますか? 切り替わるタイミングでアクティブなセルの番地を拾っておけばできるんじゃないか。 エクセルのことわざわざ英語でEXCELって書くやつなんなん? 地味な違いだけど
ローマ字綴りの方がタイプしやすいと感じてる あーあー Eきもーちー♪
いや、思い出したんでついな(´・ω・`)b JIS(?)っぽい思想だとカタカナでエクセルなんだろうなぁ、とか >>865
こういうつまらないことにこだわる奴って気持ち悪いよね 複数シートの中で売上という文字列が入っているシートがいくつかあり、
そのシート内のB列にデータがないシートのみを削除する方法を
教えていただけますでしょうか。
宜しくお願い致します。 >>874
そのまえに、そんな乱暴にシートを削除してよいのか? >>874
ディテールの書き方が少し甘い
売上という文字列はシート名に入ってるの?
それともシート上のどこかのセルとかコメントに入ってるの? >>879
わかりづらくてすみません。
シート名に「売上〇〇月」と入っております。 その程度も書けないようじゃマクロ使わない方がいい。特にシート削除は理解してないと危険。 「B列にデータがない時」ってマクロの記録じゃ無理と違うか? マクロの記録でヒントでも掴んでみろって事じゃないの
みんなトライエラー繰り返してる中、トライもせずに質問投げるのは印象良くない >>874
・for each で全シートをなめます。
・シート名に「売上」が含まれている場合、さらにB列の値を数えます。
・条件に合致したらシートを削除します。
上2つはGGればいくらでも情報でてきます。
一番下はマクロ記録でわかります。
動作上不都合な挙動があれば、その挙動を潰す方法を調べます。
基本的な動作の羅列なので、がんばって。 シートを削除するのではなく、新しいファイルを作成する方向でやってくれないかな?
こういう素人が増えると困るんだよ。
一般人はファイルのバックアップもしないし、削除してゴミ箱まで空にして、ファイルを復元しろと言い出すから迷惑。 フォームやら速度が必須でない処理はVBSとかでやった方がいいね コレクションのforeach処理内で
コレクション削除したらヤバイんじゃないの >>874 を見直すと「売上」という文言が入っているシートと解釈した方が自然。
各シートのどこかに「売上」と入力されていたらという条件は不自然。 そうだね
一旦配列とかのコンテナに入れといて
for each アイテム in コンテナ
Worksheets(アイテム).Delete
next
が安全かな >>887
あらそうだっけ? じゃぁアプローチ方法かえないとね。
削除の度に再評価とか?
ワークシート数で回せばOK?
先に調査して配列格納したシート名で削除しにいくのが安全か。
どんな方法がスマートだろう?
>>885
ファイルのバックアップはそりゃやっておいた方が無難でしょうね。
それは作り手本人が実際に困ってその必要性を痛感した時点で
学べばいい。
元データが何かのシステムからExcel形式で何度でもサクッと出力
できるもので、その一次加工の工程ならなくてもいいと思う。 B列にデータがないのを効率よく判定する方法はなんだ?
背景色とかついてても空白セルならデータがないとすべきか
数式が入ってても結果が空白セルならデータがないとすべきか
半角スペースはデータがあると判定するのか
NaNやError Valueはデータがないとみなすか
考え出すと思ったより難しいなこれ >>892 B列最終行から上に向けてxlupして
データがあったら何行目か分かるから、
それで判定したらいいんでない?
と、俺は思った >>894
それで大丈夫かどうかは質問者にしか分からないので そんな自動化しなくてはいけないほど、シートの数が多いExcelファイルがあるなら、B列に値が入っていると決めつけているのも怖いよな。
そんなExcelファイルを作る職場だとExcelファイルのフォーマットが変更されていないかどうかのチェックも必要。 条件が曖昧ならここでうだうだ考えずに質問者に明確に書くよう言えば良いだろ。
それが出てこないなら質問の体をなさないということで却下するもよし、回答したい人間が自分の想像で
回答するもよしで。
質問に書かれていないバックアップがどうこうってのも、そんなもん質問者が考えれば良いことであってこっちが
どうこう考えることじゃない。 countaで対象範囲拾うだけだと思ったけど、データ有り無し判定。 ■ このスレッドは過去ログ倉庫に格納されています