Excel VBA 質問スレ Part52

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
2018/01/27(土) 20:25:05.67ID:Xe+uGT7T
スレ立ての際は一行目に
!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/
2018/04/15(日) 16:42:54.85ID:Evm/8r2L
画像をシートに貼り付けるだけなんだから普通にファイル名指定すりゃいいだろと思うのだが
ディスクアクセスもOSキャッシュに乗るんだから連続でやれば1回読んだだけで終わる
763デフォルトの名無しさん
垢版 |
2018/04/15(日) 18:03:51.72ID:WGwd/sOZ
VBAに限った話でもなく、よくいるんだよ

どこに時間かかってるのか計測もせずに
やれ最適化レベルを上げようとかインライン化しようとか
スレッド数減らそうとか根拠もなくトライして
時間を浪費するプログラマーがな
2018/04/15(日) 19:32:20.73ID:q8wZBRrJ
つか非表示のシートにでも画像貼り付けとけば良いんじゃねえのか
2018/04/15(日) 19:35:37.64ID:koN3j5aX
htmlでいいじゃん
2018/04/15(日) 21:09:55.26ID:Pzh/Cu9E
とりあえずそのまま画像を貼り付けることにして作ったのですが、奇妙なバグが出て困りました
特定の画像ファイルだけ、指定したセルの一つ左上(C5に貼ろうとしたらB4)に貼り付けられます

それも、特定のワークシートに貼った場合のみです

同じ画像を2枚のワークシートに場所を変えて貼るのですが、(順番は無関係と思いますが)
最初のシートには正しく貼れて、次のシートだとズレてしまいます

たくさんある中の数個だけで発生する現象で、何の根拠もなくペイントブラシで画像をちょっとだけ
トリミングしたら発生しなくなりました
何が起きているのかわかる方いないでしょうか

下記のプロシージャを2回呼んでいて、違うのは引数のtargetRangeだけです

' 指定のセルの位置に画像ファイルのイメージを等倍で貼り付ける
Private Sub PasteImageFromFile(targetRange As Range, imageFilePath As String)
Dim image As Shape

Set image = targetRange.Worksheet.Shapes.AddPicture( _
filename:=imageFilePath, _
LinkToFile:=True, _
SaveWithDocument:=False, _
Left:=targetRange.Left, Top:=targetRange.Top, _
Width:=-1, Height:=-1)
image.LockAspectRatio = msoTrue

End Sub
767デフォルトの名無しさん
垢版 |
2018/04/15(日) 23:51:47.37
>>766
何が起きてるかは知らんけど、貼り付けてからもう一回位置調整すればええんでね?
2018/04/16(月) 00:20:34.44ID:f3RnCMph
ツールバーにボタンとか並べる場合って方向操作できないですか?
普通に追加してると右方向に順番に並んでいくようですけど
そうじゃなくて下方向に数個ずつ並べていきたいんですが
769766
垢版 |
2018/04/16(月) 06:08:33.87ID:6ZwybagU
>>767
当面の対応としてはそれでしのげるのですが、何が起きているのかわからないと、
処理そのものにバグが残っていることになるので後々困るな、と
後々深刻な症状に発展しないとも限りませんし
2018/04/16(月) 07:16:08.06ID:kK8liqj6
>>766
Excelのバージョンは?
ぐぐると2007で貼り付け位置がずれるバグがあったみたい
2018/04/16(月) 07:46:35.83ID:6ZwybagU
>>770
excel2010を使ってます
画像データをトリミングしたら再発しなくなったのですが、今度は再現ができなくなりました
バックアップとっといてからやるべきだった
2018/04/17(火) 00:03:37.71ID:7EYd60LZ
VBAでAPI使うのってどれくらい難しい?
教本の中級レベルなんだが、最終的にはそれくらいやりたいなと思ってる
結局"何をするか"に拠るんかな
2018/04/17(火) 00:08:06.60ID:71rZXGtd
>>772
ただ使うだけなら全然難しくない
APIを使ったサンプルをコピペするだけで使えるやつがネットにいっぱいある

大変なのは何万個もあるAPIの中から欲しい機能を見つけ出すこと
2018/04/17(火) 01:01:25.08ID:7EYd60LZ
ありがとう
とりあえずその拾い物から使ってみる
775デフォルトの名無しさん
垢版 |
2018/04/17(火) 06:57:42.37ID:7Dpz+bU0
>>773
その何万個もあるAPIを見つけるのに良いサイトとか知りませんか?
あれば教えて頂きたいです
さらに出来れば日本語だとベストなのですが
776デフォルトの名無しさん
垢版 |
2018/04/17(火) 07:04:55.69ID:9jZKmgYa
>>775
https://msdn.microsoft.com/en-us/library/windows/desktop/ff818516(v=vs.85).aspx
777デフォルトの名無しさん
垢版 |
2018/04/17(火) 07:20:21.18ID:7Dpz+bU0
>>776
ありがとうございます
でも英語なのでチンプンカンプン
日本語のコードサンプル解説がないと理解しにくいんですよね
もっと勉強します!
2018/04/17(火) 11:41:46.89ID:PYkzn9qy
win32api vba でぐぐればいっぱい出てくるやん
779デフォルトの名無しさん
垢版 |
2018/04/17(火) 11:55:31.70
C++やC#向けのサンプルコードを見てVBAで使えるようになれば一人前
780デフォルトの名無しさん
垢版 |
2018/04/17(火) 12:17:48.81ID:VAUeyy7y
ただのコピペやんw
781デフォルトの名無しさん
垢版 |
2018/04/17(火) 17:43:34.64
昔ちょっと苦労した覚えがあると思ったら、あれはPerlでWindows APIを使うときだった
2018/04/17(火) 17:50:27.17ID:PN1o89Xi
>>779
piaでエクセルの機能呼び出してるコード見ると勉強になるよな
783デフォルトの名無しさん
垢版 |
2018/04/17(火) 17:53:34.87ID:xUsXMLJ+
チケットPIA?
2018/04/17(火) 18:57:49.21ID:Sro26Cmq
・すべての変数がグローバルかつ型宣言文字を使っての指定
・使われていない関数の山
・どこからも参照されていない変数の山
・変数名・関数名が英語・日本語・ローマ字の混在

こんな凄まじいコードを修正・機能追加することになって泣いています
自分まだプログラマ歴1年未満なので、単に超絶技巧コードを見て理解出来てないだけという可能性もあるなと思いここに来ました
vbaのコードではこういう読みにくいのも割とあるものなのでしょうか。そしてこういう書き方でも実は良いとされる場面があったりするのでしょうか
2018/04/17(火) 19:12:22.44ID:upC1/Erc
何日間で何人でどういう内容の作業をするの?
オジサンにおしえてごらん♪
価値相当の価格なのかも知らんし
2018/04/17(火) 19:33:49.32ID:3oXUXGvj
>>784
VBAでは割とよくあるよ
基本的にみんな低レベルだからコードも汚い
まあ書き直したほうがマシだろうね
787デフォルトの名無しさん
垢版 |
2018/04/17(火) 21:47:12.39ID:9jZKmgYa
VBA担当は新人または使えないおっさんと相場が決まってるからな
2018/04/17(火) 22:15:51.49ID:OguVeWqq
プログラマーとは認められない者

エクセルエンジニアw
2018/04/17(火) 23:50:58.95ID:jnGKhzNu
セルを変数代わりに使う素晴らしい見識をお持ちのクソジジイが同じ部署にいる
2018/04/18(水) 00:19:02.87ID:Av//TRQH
教本を読んでると
・メンテナンスしやすいスクリプト
・誰が見ても分かるスクリプト
みたいな項目が必ずと言っていいほど出てくるんだが、
酷いのはそんなに酷いのか?
今の職場は自分1人だけしか作ってないから可否が分からん
2018/04/18(水) 00:26:46.75ID:RSRnSjrn
コード読めないって言っているヤツは単なる知識不足が大半だけどな
2018/04/18(水) 01:23:10.31ID:ABcs9Eg1
シートにフォームコントロールのボタンがあって、押すとシート上で条件を満たすセルを変化させる
そういうコードを書こうと思ってます。この場合、標準モジュールに書くべきですか?それともシートモジュールに書くべきですか?
一応前者かなとは思ってるんですが

>>791
変数名の付け方とかコメントとかそういうところでほんと読める読めないが変わってくることを最近実感してますね
2018/04/18(水) 01:38:15.90ID:RSRnSjrn
>>792
計算式とかは標準モジュールでもいいと思うけど全部シートモジュールの方が面倒が無い
別のシートから同じ関数呼び出したいとかいう話になってから切り分ければいい
2018/04/18(水) 04:08:59.43ID:vJ9/iAQD
>>784
> 型宣言文字を使っての指定
とは何ぞ? データ型定義が凄まじいコードということ?
2018/04/18(水) 04:20:24.72ID:RSRnSjrn
>>794
文字の後ろに特定の文字を加えると、その型での変数を宣言できるんだよ

Sub test()
i$ = "test"
Debug.Print i
End Sub

みたいな書き方が出来る。
ヘルプでString型とかLong型とかの項目見てみると「型宣言文字は〜〜です。」って載ってる。
2018/04/18(水) 04:38:46.99ID:vJ9/iAQD
ああ、昔見た気がする。
VBAでも使えるんだね。書く機会があればイヤガラセで多用してやろう。
2018/04/18(水) 09:24:59.94ID:ins5325S
型宣言文字は互換性維持のための隠れ仕様にしてくれ
リファレンスに易々と載せるべきではない
798デフォルトの名無しさん
垢版 |
2018/04/18(水) 12:24:01.12ID:LApBWp2e
>>797
「その程度に簡単に思いつく弊害のような事をリファレンスの作成者が気付いてない訳がない」
というとこまで考えが及ばないほど自分の思慮が浅い事には気がついた方が良いと思うよ
2018/04/18(水) 14:03:23.26ID:k8PiJXI5
正直、型宣言文字の何が弊害なのかよくわからない
今は使ってないけど昔は使ってて、これといった害はなかったからね
2018/04/18(水) 14:16:43.80ID:RSRnSjrn
Dimとか無しでコードの途中で自然に宣言できるので、
HowTo本に出てくる伝説の存在「全ての変数が最初に書かれていないとコードの読解に支障を来す勢」にとって不利なんじゃない?
2018/04/18(水) 16:27:48.27ID:k8PiJXI5
>>800
ああなるほど
Dim a&
みたいな使い方しかしてなかったから無縁だな
しかしすべての変数が冒頭になきゃいけない人たちって、Exit Function や Exit Sub のあとに出てくる変数も
そうなのかね?
2018/04/18(水) 16:49:41.54ID:FXGDHP9F
初めて知ったがこれはむしろC#のvarみたいで必要な機能だよなこれ(同じだよな?)
問題は変数名$っていう目に優しくない文法だけだ
803デフォルトの名無しさん
垢版 |
2018/04/18(水) 17:00:05.48
>>801
そんなんモジュールの先頭にまとめるだろ
関数定義の後に出てくるモジュール変数とか鳥肌が立つわ
2018/04/18(水) 17:05:46.97ID:k8PiJXI5
>>803
関数内ローカル変数の話だよ
2018/04/18(水) 17:58:52.75ID:d/mhsB/j
テキストファイルをline inputでループして自分の名前が入っていたら、エクセルに張り付けていきたいんですけど、その際に抜き出した行を消してテキストファイルを更新して、最終的には自分の名前のないテキストファイルにするにはどんな作り方ですか?
2018/04/18(水) 19:40:47.78ID:GNqfI2kR
抜き出さなかった行を別のファイルに追記していく
最後に元ファイルけして、別ファイルを元ファイルにリネームする
2018/04/18(水) 22:25:17.86ID:kL5iQ307
N88-BASICもマイクロソフト製だったから、文字列変数には$、倍精度実数は#を付けるとか、当時は必須の知識だった
ところでDEFINTはVBAでも使えるんかな?
808デフォルトの名無しさん
垢版 |
2018/04/19(木) 00:41:36.44ID:Z28Cxj5J
デフィングフタッ!
809デフォルトの名無しさん
垢版 |
2018/04/19(木) 12:06:57.90ID:+4ib45ZB
ファイルの拡張子をBakにする
それを読んで必要な行を元のファイル名に出力する
これで必要な行が無ければファイルも消える
810デフォルトの名無しさん
垢版 |
2018/04/19(木) 12:18:21.18
>>809
更新する必要がないときにファイルを更新してしまうのは下策中の下策
811デフォルトの名無しさん
垢版 |
2018/04/19(木) 12:21:25.32
>>805
数百MBあるようなファイルじゃなければ、
一括で文字列として読み込んで
一行ずつ処理して出力用の新しい文字列を組み立てて
読み込んだ文字列と新しい文字列に差分があれば
ファイルに一括で書き込むのが
性能面でも処理の分かりやすさでも優れてるよ
812デフォルトの名無しさん
垢版 |
2018/04/19(木) 12:22:32.15ID:F3Bh1jYP
更新する必要がないのに更新されてしまったら
それは下策ではなくバグやぞ
2018/04/19(木) 18:39:40.27ID:ml4EPJfx
初歩的な質問で恐縮なんだが
もしかしてマクロってやりたい事をコードでできる要素に分解するのが難しいのか?
俺はてっきり文法的な難しさが勝ると思ってたが、
実務に落とし込もうとした時に、この作業をどうやってコードに起こそう?ってフリーズしたわ
2018/04/19(木) 18:44:14.89ID:rUVJgjTn
何を言っているのか分からないw
815デフォルトの名無しさん
垢版 |
2018/04/19(木) 18:51:50.57ID:Z28Cxj5J
おいおい笑っとる場合とちゃうでそりゃ
2018/04/19(木) 18:55:32.33ID:vrFoPp38
そうだよ
VBAはエクセルを使った作業を助けるちょっとした拡張を書く分には適してる
でもそれ以外のエクセル関係ない処理を書くのにはお世辞にも向いてるとは言えん
そんで業務上で実用的な処理って殆どはエクセル関係ないんだよね
2018/04/19(木) 19:01:06.47ID:4+we2EIF
はいはい、他の言語勧めるならVBA使う職場でIDE入れる許可取る方法も合わせて紹介してくださいね
2018/04/19(木) 19:22:27.76ID:vrFoPp38
IDEなんていらんよ
WindowsならPowerShellが使えるからね
2018/04/19(木) 19:30:43.32ID:4+we2EIF
インテリセンス無しで書くって状況を効率的と称するのはちょっと現実見えてないどころの話じゃないな
2018/04/19(木) 20:15:01.48ID:FhTBU56j
>>818パワーシェルでスクリプト走らすための設定をするのが面倒っていうか、いちいち覚えてらんない
スクリプトを走らすための設定をするスクリプト無いのかなぁ
821デフォルトの名無しさん
垢版 |
2018/04/19(木) 20:28:26.88ID:Z28Cxj5J
またパワー系バカかいなw
2018/04/19(木) 20:48:34.30ID:srwk8Yrs
>>812
理解力無さすぎ

(ファイルの内容を)更新する必要がないのに(ファイルの更新日時が)更新されてしまったら

って話な
823デフォルトの名無しさん
垢版 |
2018/04/19(木) 21:23:11.71ID:Z28Cxj5J
>>822
理解力無さすぎ

タイムスタンプが変わるのはファイルの更新ではない

って皮肉やぞw
2018/04/19(木) 22:01:03.55ID:srwk8Yrs
ちょっとなに言ってるのかわかりませんな
皮肉の意味も知らなさそうw
825デフォルトの名無しさん
垢版 |
2018/04/19(木) 22:03:43.71
所詮VBAエンジニアだもん
2018/04/19(木) 22:10:03.54ID:vrFoPp38
エンジニアって言葉に違和感がある
VBAユーザーとかにしてくれ
827デフォルトの名無しさん
垢版 |
2018/04/19(木) 22:16:42.11ID:Z28Cxj5J
悲報、VBAエンジニアさん皮肉を理解できないwww
2018/04/19(木) 22:51:03.97ID:NI/UICUh
これはさすがに恥ずかしい
2018/04/20(金) 01:10:17.00ID:ZSD8J3qj
エクセル関数で出来る事は全てマクロでも出来ると思っていいのかな

今VLOOKUPを大量に使って元データのシートを4,5枚のシートに分けて転記してる作業があって、
このブック自体、ある意味完成されてるから業務上特に問題はないのだが
セルの中身を見ると酷く不恰好でな
背中がムズムズするから改善したいと思ってる
2018/04/20(金) 02:51:15.64ID:750RsbNY
転記と参照は異なるイメージ
2018/04/20(金) 06:26:22.33ID:Z/hF/kR3
>>829
関数はVBAで組まれているので、十分な理解の元でマクロを組めば同処理同時間になる。
それにマクロの方が無駄な機能を省くなど最適化しやすいので、処理時間は普通、 関数≧マクロ になる。

最近のバージョンだと関数はSIMD使ってたりセル単位で並列処理してたりと、
マクロで出来ない事やってるとは聞くんだけど実際問題処理時間に反映されてないんだよね。
2018/04/20(金) 07:16:10.06ID:DDZisBas
>>831
> 関数はVBAで組まれているので
そんな珍説初めて聞いた
2018/04/20(金) 07:34:56.30ID:Z/hF/kR3
>>832
珍説も何もMSDNに書いてあった事だからなぁ
最近のバージョンだと違うのかもしれないけど
2018/04/20(金) 08:02:16.85ID:DDZisBas
>>833
ソース出してみ
2018/04/20(金) 08:46:12.64ID:0VrNppPf
共同ツール 1

https://seleck.cc/685

https://trello.com/
ボードのメニュー → Power-Upsから拡張可能 Slack DropBoxなど
Trello Chrome拡張機能 elegant
ttp://www.kikakulabo.com/service-eft/
trelloのオープンソースあり

共同ツール 2
https://www.google.com/intl/ja_jp/sheets/about/

共同ツール 3
https://slack.com/intl/ja-jp
https://www.dropbox.com/ja/
https://bitbucket.org/
https://ja.atlassian.com/software/sourcetree
https://sketchapp.com/extensions/plugins/
ttp://photoshopvip.net/103903

ttps://goodpatch.com/blog/sketch-plugins/
2018/04/20(金) 15:24:43.31ID:RP9oZBhW
VBA マクロを外部 dll にて記述することは可能ですか?
VBA マクロから外部 dll を呼び出すことは可能ですか?
VBA の関数を外注したいのですが
2018/04/20(金) 16:34:17.47ID:3Cb8dXo7
>>836
VBAのdll化ってのは聞いたことがないな
同等の機能をC++とかで書ければそれをdll化すりゃいいけど
2018/04/20(金) 17:22:24.62ID:fJgzb4WI
sheetオブジェクトさわれないと不便だろうからc#+OpenXML でdll作れば?
2018/04/20(金) 18:28:12.60ID:hyGn+NWp
>VBA マクロから外部 dll を呼び出すことは可能ですか?

圧縮用に unlha32.dll を使ってる。セキュリティがどうのこうの言われてたりしたけど
まぁ自分用途に使う分には問題ないし外部dllを呼び出せるか?って質問に呼び出す
例としてあげただけなんで。
2018/04/20(金) 19:43:37.08ID:P2bCm2Cm
>>836
Module1.bas のまま納入してもらえばいいじゃん。
841デフォルトの名無しさん
垢版 |
2018/04/20(金) 21:11:48.80ID:TsjxvbIu
>>836
なぜVBAで作らせたいのか?
2018/04/20(金) 21:51:00.88ID:/f4SVs1l
だからさ、そういうのはVBAの仕事じゃねんだよ
2018/04/21(土) 00:19:32.87ID:6+H6buOa
VBAの仕事って何だよ
エロ画像の整理とかで圧縮ファイル扱うしun*32.dll系はむしろよく使うんじゃないの
2018/04/21(土) 03:17:59.36ID:C12WZHgI
>>841
投資分野における RSIインディケーターをexcel 数式で使いたいのです
845デフォルトの名無しさん
垢版 |
2018/04/21(土) 06:32:49.84ID:cZjOaU/p
>>844
それはファンクションプロシージャでラッピングすればいい話で、VBAの話ではない。
2018/04/21(土) 07:36:11.37ID:g3Kr5e2D
>>843
そんなんVBAでやる理由が皆無やろ
847デフォルトの名無しさん
垢版 |
2018/04/21(土) 07:43:23.30ID:lPKh0fp6
>>844
そんなんだったら関数本体はVBAもExcelも関係ない汎用的な言語で処理を書けるから、
VBA用のインタフェースを備えたDllを作るのは割と簡単な仕事だろうね。
2018/04/21(土) 07:57:41.71ID:g3Kr5e2D
VBAerは世界感が狭いからなんでもVBでやろうとするなぁ
849デフォルトの名無しさん
垢版 |
2018/04/21(土) 07:59:35.52ID:nwm3yYwa
>>848
VBAエンジニアって呼べや
2018/04/21(土) 08:37:53.75ID:wT5HHzfo
開発環境をインストールできない環境では
VBAぐらいしか選択肢がない
2018/04/21(土) 08:38:57.92ID:GXQ98g1T
エクセルは統計に使う関数が一通り揃ってるんで投資分野は使いやすいぞ
インジケータならMT4とか使った方がいいような気はするけど
2018/04/21(土) 08:59:09.12ID:8eWDHGAr
>>807
88世代でもそこはN-BASICと言って
ジジイっぷりを発揮するべき
2018/04/21(土) 09:58:30.23ID:C12WZHgI
>>847
エクセルで指定されたシートの範囲を dll にて取り出す方法がわかりません
2018/04/21(土) 10:09:46.33ID:FdDi/Wma
>>851
むしろエクセルはまともに統計に使える関数少ないだろ。重回帰くらいしかない。
相関行列や時系列分析なんかないし。自分で作るしかない
しかもエクセルじゃビッグデータは重すぎて、全体的な見通しも悪い。
2018/04/21(土) 10:14:19.71ID:g3Kr5e2D
他の選択肢を知れば知るほどもうVBAはねえわってなるよね普通
VBAに執着する人ってどんだけ勉強嫌いなんだろう
856デフォルトの名無しさん
垢版 |
2018/04/21(土) 10:14:56.03ID:lPKh0fp6
>>853
VBAでシートから配列に変換してdllに渡す
計算結果は配列でVBAに返す

dll側はシートなどのExcelオブジェクトと切り離す
2018/04/21(土) 10:15:29.17ID:a1jne6cy
>>855
そんな事言うためにこのスレに留まってるの?
2018/04/21(土) 11:33:54.73ID:C2C7Ud8C
フォルダAにある現在開いているファイル以外のファイルをフォルダBにコピーし、
その後、フォルダAにある現在開いているファイル以外を削除する方法を教えていただけますでしょうか。
よろしくお願いします。
2018/04/21(土) 12:13:41.84ID:g71h8OPL
>>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

これでどうかな
実験してないのでこけるかも知れない
2018/04/21(土) 12:20:05.75ID:C2C7Ud8C
>>859
ありがとうございます。
理想としていたことができました。
2018/04/21(土) 12:28:03.91ID:7+Um7Y8b
>>848
ヴィーバアーって読むん? それともビーバー?
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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