Excel VBA 質問スレ Part56

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
2018/08/23(木) 07:25:24.98ID:Kh3D3mRW
ExcelのVBAに関する質問スレです
コード書き込みや作成依頼もOK


※前スレ
Excel VBA 質問スレ Part55
http://mevius.5ch.net/test/read.cgi/tech/1532236398/l50
2018/09/04(火) 17:36:19.80ID:5IEm8hb2
デコードしてファイル読み込んで情報を探すだけでは?
2018/09/04(火) 19:01:02.67ID:Ur36aaCZ
PDFのファイルフォーマットみて自分でなんとかできるならVBAの基本機能でできるかもしれんが

手軽な方法はそれ用のライブラリ探すことからだな
2018/09/04(火) 19:06:17.28ID:VcFnwWP5
あまりに冗長なCOBOLコード(負の遺産)に嫌気がさし、ソース解析マクロの作成を決意。

作りたいものがあるとモチベ上がるよね
651デフォルトの名無しさん
垢版 |
2018/09/04(火) 19:11:22.13ID:RaX7EawA
コボルで書けや
2018/09/04(火) 19:17:05.03ID:qTWx44W8
そのマクロも負の遺産になる
2018/09/04(火) 19:38:58.88ID:Ia+IVj5j
それなぜVBA?
2018/09/04(火) 19:44:23.68ID:2YDEkct0
ソース解析ツールなんてそれこそ金出してでもコーディングの手間を惜しむべきコモディティじゃん
VBAでやる必要あるのか?
2018/09/04(火) 20:01:06.73ID:d1yNDTEj
ホストにある資源を自分のローカルに持ってくにはテキストファイル化せなあかんのや。
メソッド同士をハイパーリンクで紐づけたり、使ってるサブルーチンを表にしたり。なんやかんやでVBA様便利やでー
2018/09/04(火) 20:04:26.22ID:Ia+IVj5j
>>655
それってVBAとなんか関係あんの?
2018/09/04(火) 20:04:52.77ID:d1yNDTEj
幸い、COBOLはクラスとかアクセス修飾子って概念がないので他言語に比べたら解析ツールは楽に作れそう…って見立てや
2018/09/04(火) 20:10:57.08ID:qO3EZwXy
>>655
ホストにある資源って言ったら普通データのことだろう。
COBOLプログラムが資源なのか??
2018/09/04(火) 20:12:10.66ID:d1yNDTEj
>>656
VBAを選んだ理由を示しただけや。
やっぱりエクセルの機能を生かせるのがVBAの強みよ
2018/09/04(火) 20:12:57.29ID:qTWx44W8
VBAでCOBOLの構文解析とかそんな苦行に苦行を重ねなくてもまともなツールぐらい腐る程あるだろ…
と思って検索したらIBMのプログラムの次にVBAのツールが出てきて変な声出た
2018/09/04(火) 20:14:11.68ID:qTWx44W8
タンスの奥を探してたらゴキブリの死骸を見つけた気分だ…
2018/09/04(火) 20:14:17.39ID:Ia+IVj5j
>>659
理由になってなくない?
2018/09/04(火) 20:16:25.24ID:d1yNDTEj
>>659
認識の違いかな。すまん
俺はソースコードもホストの資源だと思ってるよ
データもソースも結局はデータセットに入っているわけだし
2018/09/04(火) 20:17:48.78ID:d1yNDTEj
安価ミスごめん。658に返答してる
2018/09/04(火) 20:18:56.94ID:Ia+IVj5j
つーかCOBOLに限らず古い言語って解析機の設定難しいよ
古いものは文法が洗練されてないので当然っちゃ当然だけど
666デフォルトの名無しさん
垢版 |
2018/09/04(火) 20:23:31.43ID:RaX7EawA
なんや急にこの賑いwプロさんてみんなコボラーくずれなんかw
2018/09/04(火) 20:23:44.65ID:d1yNDTEj
>>660
そもそも、レガシーなモノを解析するツールを、わざわざ新しい言語で開発するなんてあまりないんだろうな…
2018/09/04(火) 20:26:20.57ID:d1yNDTEj
>>665
そうね。大昔のソースは見ていて頭痛がするわ
谷のように深いネストやGO TOの嵐…
だからこそ何かツールを作ってみたくなった
669デフォルトの名無しさん
垢版 |
2018/09/04(火) 21:00:05.70ID:qO3EZwXy
>>663
COBOLソース解析してどう再利用するのさ?
そこがわからん
2018/09/04(火) 21:02:18.90ID:qO3EZwXy
流れ関係ないけどVBAってやっぱりネット上に良質の情報が少ないんだよ。
今のqiitaとかなんだありゃ。いったい誰に語りかけてるんだかわからん記事が多すぎだ。
2018/09/04(火) 21:17:41.07ID:Ia+IVj5j
良質な情報は良質なプログラマから発信される
アマチュア主体のVBAじゃ限度がある
672デフォルトの名無しさん
垢版 |
2018/09/04(火) 21:24:54.44ID:ltlt+wga
でもプロが作ったシステムより社内で作ったものの方が完成度高いんだよね
2018/09/04(火) 21:29:32.62ID:d1yNDTEj
わざわざVBAのノウハウをqiitaに投稿してくれる熟練者がいないのかもな。
VBAはあくまで仕事のためのちょっとしたツール作成のための手段というイメージ。
いわゆるガチな人の大半は、もっと違う言語に目を向けているのだろうな
2018/09/04(火) 21:31:59.83ID:Sk84LOCD
かなり以前にシステム移行で既存のCOBOLソースのチェック用にVBAでソース解析のツールを利用したことはある。
解析とは言ってもホストのコンパイル済みソースをPCに落としてその後どうしたか…もう昔のことで覚えていないw
2018/09/04(火) 22:45:37.57ID:TA0zYEOn
棒グラフの作り方で質問です。
バーの色を、データ元のcellや文字色に対応させて一括変更することは出来ますか?
2018/09/04(火) 23:36:54.27ID:SqKMuHLB
>>675
できます
677デフォルトの名無しさん
垢版 |
2018/09/04(火) 23:41:04.59ID:RaX7EawA
>>675
できません
>>676は貴方を騙そうとしています
彼には十分気をつけてください
2018/09/04(火) 23:51:20.39ID:Ia+IVj5j
真実は自分の眼で確かめるんだ
2018/09/05(水) 00:05:21.43ID:hA39yyTc
>>675
VBAなら簡単に色の変更ができる
https://i.imgur.com/VP1W4uD.jpg
680デフォルトの名無しさん
垢版 |
2018/09/05(水) 00:06:51.88ID:hapuVvhb
行の値を順番に見て見入って
別のシートのB列に存在していればA列に●ってのを入れたいのですが

For i = 1 To Range("B2").End(xlDown).Row
If WorksheetFunction.CountIf(Worksheets(Sheet1).Range("B1:B1000"), Range("B" & i).Value) = 0 Then
Range("A" & i) = "●"
End If
Next

5000行でもかなり時間がかかります。もっと時間がかからないやり方があれば教えて下さい
2018/09/05(水) 00:08:23.39ID:hA39yyTc
>>679のプログラム
Sub Macro1()
  ActiveSheet.ChartObjects("グラフ 1").Activate
  With ActiveChart
  For k = 1 To 2
    With .FullSeriesCollection(k)
    For p = 1 To 10
      .Points(p).Format.Fill.ForeColor.RGB = Cells(p + 1, k).Interior.Color
    Next
    End With
  Next
  End With
End Sub
2018/09/05(水) 01:00:37.13ID:D+OUZtCk
>>680
作業列作るなりしてワークシート関数でやった方が早いよこんなことは
あと、この条件だとSheet1に値が存在しない場合にA列に●がつくことになると思うよ
2018/09/05(水) 01:38:55.49ID:/jm+tBQ6
?とりま全部配列にぶち込んで置換処理してから書き出しでは?
2018/09/05(水) 01:45:14.10ID:Utg8HVgU
>>673
VBAのスキルをアピールすると逆にバカだと思われるから
煽りじゃなく転職とかで事実そういう目で見られる
2018/09/05(水) 02:58:54.45ID:K0pGicrM
>>632
まず第1にマクロの記録はやってみたのか?
やりもしないで質問するじゃ回答がつかないのも仕方無かろう。

次に、内容をよく見ればXMLやJSON関係ないだろ。
テキストファイルさえ関係ない。
質問する時にいらない情報は削った方が良い。


>>636
>>646
君が元の質問者かどうか分からんが、マクロの記録さえやらない、もしくはそういう機能さえ知らないレベルの者が回答がつかないからといってVBAでは難しいなどと思い込むのはどうなんだ?

元の質問者じゃ無かった場合だとしてもディスる為に試してみることさえしないようなレベルの奴は、そもそもプログラム組むような仕事はして欲しく無いな。
周りにとって迷惑だ。
2018/09/05(水) 03:00:31.24ID:UEpkpswy
↑はあ?
2018/09/05(水) 03:05:14.58ID:K0pGicrM
>>647
基本機能というのがどういうものか分からんが、PDFの仕様が分かればファイルの読み書きで出来る筈だ。
昔、そういうのを書いたことがある。
ただし、PDFの場合、バージョンと扱いたいデータによっては出来ないこともあるだろう。
2018/09/05(水) 04:36:08.22ID:cWJzUFK9
PDF関連は、ここ読んでVBAで作ったことあるけど、面倒だったな
ttp://pdf-file.nnn2.com/
2018/09/05(水) 05:27:37.56ID:w7O3HrXU
>>685
マクロの記録でどう操作すればファイルを同梱できるん?
2018/09/05(水) 06:11:08.39ID:d26VWmGv
>>685
文字列型データをセルやテキストボックスのような組み込みオブジェクトのどれかにコピーするという単純な話だと誤解してないか?
埋め込みリソースの意味が分かってないなら君が黙ってた方がいいと思う

basファイルというか標準モジュールに行頭カンマ付 or 二重引用符付でデータを書き込んでおいて、そのデータをマクロ実行時にコピーして任意の形式のファイルを生成するとかはどうかな
この方法なら一応、エクセルのオブジェクトへのテキスト保存という方法よりは埋め込みリソースに近いイメージになるかも
VBEの操作を含むマクロになるので配布のハードルが著しく高くなるし、画像とかなら埋め込んでおくデータをバイナリデータにするとかの工夫が必要だけど
2018/09/05(水) 08:05:37.32ID:K0pGicrM
>>689
>>690
???
あのさあ、試してから言ってくれないかな。

1.[開発]リボン→[マクロの記録]を選択
2.[挿入]リボン→[オブジェクト]を選択
3.[オブジェクトの挿入]で[ファイルから]タブを選択して、ファイル名に適当なdllを指定する。
4.[開発]リボン→[マクロ記録の停止]

これで基本的にどんなファイルでもシート上に埋め込めるソースコードが出来てると思うんだが。

俺の誤解だったらすまないが、俺への指摘が噛み合ってるように見えないもんで。
2018/09/05(水) 08:14:23.51ID:K0pGicrM
埋めこみオブジェクト自体は誰でも知ってる基礎的な話だと思うんだよ。
なにしろ20年以上前に初めてExcel触った時からあった機能だと思うんだよな。
シートに画像を貼り付けたつもりなのにアイコンになってしまったなんて質問をそれぐらい前に見たような気がするんで。

であれば何らかの理由が無い限りマクロの記録でそのためのソースコードが出来るだろうと考えるのも当然のこと。

何でこんな質問が?とも思ったけど、何らかの理由があってマクロの記録では記録されないような機能だったかなと試してみたら記録された。
2018/09/05(水) 08:29:10.16ID:K0pGicrM
>>688
俺が書いたのはこんな便利な機能使ったものじゃないと思う。
PDFのファイル構造はググれば出てくるが、バイナリをゴリゴリする方法だったと思う。
OLE使った記憶が無いもんなあ。
すまんが、大分昔で自分がどんな方法で書いたかはほとんど覚えていないのでかなり曖昧。

ゴリゴリ書く方法はお勧めしない。
>>688のリンク先の技術を使った方が良いね。
2018/09/05(水) 08:40:26.86ID:BLSFUWnl
>>691
ありがとう
やり方がわからないから聞いてるわけで
わからないんだから試せるわけないよね
次からはもっとさっさと説明してね
2018/09/05(水) 08:45:18.19ID:BLSFUWnl
オブジェクトの挿入じゃダメだった?
と聞くのがいんじゃないかな
マクロの記録は試したかじゃ意味がわからないよ
2018/09/05(水) 08:54:18.91ID:BLSFUWnl
教えてくれてありがとうという感謝の気持ち
態度が気に入らないという憤慨の気持ち
2018/09/05(水) 09:00:50.18ID:K0pGicrM
ファイルを埋め込むという機能が存在する、そしてその方法も知っているけれどもそのVBAのコードを知りたいという質問と受け取ったので。
2018/09/05(水) 09:06:09.22ID:BLSFUWnl
なるほどじゃあしょうがない
2018/09/05(水) 09:23:22.51ID:WdcKF4ti
相変わらず日本語読解が下手くそなようで
2018/09/05(水) 09:23:33.11ID:/jm+tBQ6
久しぶりに質問スレらしい流れになったことを謹んでお喜び申し上げます
2018/09/05(水) 10:28:50.37ID:nGdPYXGE
>>680
並び替え可能なら、Matchのバイナリサーチモードで1Sec以内で終わると思う。
2018/09/05(水) 11:04:22.64ID:X0GkLMTX
>>693
記憶が曖昧とか誤魔化さなくていいよ
ググったらそれらしいものが出てきたからドヤりたいけど、やったことないからやったことあるって断言したくないなーってところかな
2018/09/05(水) 11:18:04.04ID:ygtNLEZP
PDFでドーナツ作る方法教えてください
2018/09/05(水) 12:01:11.93ID:tFzj0agy
横からだが>>632のやりたいことを誤解してたようだ。
シート以外の場所にテキスト情報を埋め込んで、なおかつプログラムから直接その内容にアクセスしたいんだと思ってた。
埋め込みオブジェクトじゃそんなこと出来そうもないしな。
単に同梱したかっただけなのか。
2018/09/05(水) 12:14:10.69ID:7w3bpeCa
>>704
質問者ですがあなたの理解のほうが正しいです
埋め込みオブジェクトの話ではありません
余計なシートやオブジェクトを増やしたくはありません
2018/09/05(水) 12:17:37.36ID:tFzj0agy
>>705
ふーんそうなんだ
念のためだけどテキスト情報は隠蔽する必要があるの?
それと量はどれくらい?
2018/09/05(水) 12:27:37.99ID:K0pGicrM
>>702
???
俺は>>688じゃないし、ググってもいない。
当時PDF Hack読んでたからそれに載ってる情報かもしれないが、手元にPC無いから確認できん。

PDFの仕様はググれば出てくるぞ。
後はバイナリで読み込めば良い。
当時作ったのも、サンプル程度の断片だ。
家で探せば有るとは思う。
2018/09/05(水) 12:29:44.62ID:K0pGicrM
>>703
ドーナツ画像をPDFにするだけじゃね?
そんなことを知りたいの?
2018/09/05(水) 12:31:49.01ID:7w3bpeCa
>>706
C言語やC#などの埋め込みリソースを使用するのに適した場面と同程度を想定してください
2018/09/05(水) 12:39:44.20ID:K0pGicrM
>>705
自分が少しおかしなこと言ってる自覚ある?
テキストファイルに画像を埋めこみたいと言ってるようなもんだぞ。
それでテキストにエンコードして追加してもテキストファイルじゃないと言い張ってるようなもんだ。

俺もブックはZip圧縮したものだから、単純に中に含めることも考えたけど、それって正式にExcelのブックと呼んで良いのかね?
JPEG画像なんかにファイル埋め込むのと一緒。
2018/09/05(水) 12:52:34.07ID:BLSFUWnl
お客様の中にオプンエクスエムエルの仕様に詳しい人は居ませんか? カスタムファイルを含むことはできるんでしょか?
2018/09/05(水) 12:59:52.03ID:7w3bpeCa
>>710
おかしいでしょうか?
テキストや画像とマクロブックでは利用目的もなにもかもが全く違います
テキストに画像を埋め込みたいという需要はあまりないかも知れませんが(まあSVGとかありますけどね)
マクロブックは1ファイルであることに非常に大きなメリットと需要があります
もしも他の言語で出来るようなスマートな方法でファイルリソースを埋め込むことができないならば
それはマクロブックのアイデンティティを揺るがしかねない由々しき問題です
2018/09/05(水) 13:04:23.79ID:X0GkLMTX
>>707
自作PDFを齧った人なら「仕様はadobeから出てるよ」「後はデコードしてテキスト処理すればいい」と言うんじゃないかな?
714647
垢版 |
2018/09/05(水) 13:20:43.83ID:Xc88RL8s
レス付けてくれてる人ありがとう
ただ初心者で事務員レベルの知識しかない為デコード云々言われても全然ピンときてないわ
とりあえずurl参考にもう少し学んで、まだ分からない点あったら後日改めて具体的に聞く
2018/09/05(水) 13:36:03.48ID:EHTwLxuU
>>712
PowerShellやRubyではどのように埋め込みますか
2018/09/05(水) 15:27:11.66ID:UEpkpswy
Rubyでは埋め込まないで
ファイルそのまま置くだろ
Webアプリが多いし
2018/09/05(水) 16:15:19.01ID:tFzj0agy
シートこそテキストの埋め込みに最適な気がしてきた
セルに名前付ければそれが擬似的なファイル名じゃないか
718647
垢版 |
2018/09/05(水) 18:25:15.51ID:Xc88RL8s
>>688の参考サイト見たけどやっぱりacrobat proが無いと動かんみたい
理想は標準機能(オートメーション?)での操作なんだけどproが無いと無理そうだよね?
あとpdfデコードしてーてのは普通にpdf開いてテキスト部分がバイナリ化?されてるからそこを戻したらテキストいじれるて理解であってる?
2018/09/05(水) 18:33:27.68ID:dDzWsxlQ
>>677
自分の無能さを思い知れ
2018/09/05(水) 18:43:15.08ID:K0pGicrM
>>712
そういうことを言ってるんじゃない。
>>711を見て、そういえばそうかと思ったわけだけどOpenXMLの仕様にあればおかしく無いんじゃね?
仕様に無ければ例えExcelで開くことが出来ても不正なファイルだろという意味で言った。

よく考えればVSTOもあるし、Excel上で手動で出来ないことでもブックの仕様として、あり得るわな。
実際に仕様としてあるかどうかは知らん。
721デフォルトの名無しさん
垢版 |
2018/09/05(水) 18:48:05.53ID:HpE7IfIU
ここは一つ、ぜひRubyキチガイにワンライナーでこうするんだ!ってのを書いてほしいっす
2018/09/05(水) 18:53:42.70ID:K0pGicrM
>>713
当時、Adobeから仕様を取得したかどうかも覚えていない。
もしかしたらPDF Hackのサンプルを弄った程度かもしれんし。

当時は、Anotationをどうにかしたかったんだが、それは出来なかった。
Pro版で作ったPDFはReaderからAnotationを追加出来たんだよな。
レビューコメント追加するのに便利だと思ってた。
でも配布元がPro版じゃ無かったから
うまい追加方法が無いかと。

Anotationをどうにかしようとしてたとすると、俺も何らかのライブラリ使ってたかもしれない。
2018/09/05(水) 19:06:18.69ID:gtpSZGl0
テキストファイルに画像(というかバイナリ)埋め込みは昔からuuencdeとかあるんだから
そういうのを応用すればExcel VBAでもコード内に埋め込みはできるよね?

data = array( "埋め込みコード1", _
"埋め込みコード2", _
"埋め込みコード3" )

decode2file(data, file)
2018/09/05(水) 19:10:14.81ID:UEpkpswy
コード内に埋め込みなんて
メンテしにくくて効率悪い
今は普通にファイルで管理するでしょ?
2018/09/05(水) 19:22:28.34ID:gtpSZGl0
それぐらいバッチ処理すればいいじゃん
そういうのすら面倒なら知らね
726デフォルトの名無しさん
垢版 |
2018/09/05(水) 19:25:17.48ID:6Z3q2IUX
>>719
なんや急に?なんか悔しかったんか?
2018/09/05(水) 19:44:21.15ID:Gm1e1X5r
>>721
断じていつものruby基地外ではないがテキストだけならこれで
Poppler::Document.new(“hoge.pdf”).map(&:text).join.scan(/必要な値の正規表現/)
2018/09/05(水) 19:46:31.98ID:Xm1UlI+a
プログラムを簡単に作ってやりたいが
簡単にしすぎるとVBAにたどりついてお金がかせげない
2018/09/05(水) 20:01:23.57ID:BLSFUWnl
ボクはポプラの枝になる〜
2018/09/05(水) 20:28:52.47ID:YH48VGUo
PDFからのデータ抽出と言えばゴーストスクリプト使うのが一般的ちゃうん
2018/09/05(水) 21:51:43.21ID:Thm6ImT5
>>723
1ファイルが良い理由の1つにユーザーが扱いやすい、つまりユーザーがメンテしやすいってのがある
なのでそういうメンテナンス性を著しく低下させる方法は意味がない
2018/09/05(水) 21:54:45.74ID:+hZ+CXx5
>>730
あれpdf作る側で読み出しとかできるんだっけ?
2018/09/05(水) 22:20:48.77ID:Gm1e1X5r
出たよ謎の1フォイルへのこだわり
734デフォルトの名無しさん
垢版 |
2018/09/05(水) 22:23:11.74ID:6Z3q2IUX
謎の1フォイルへのこだわりてそんなにメジャーなんか?
735デフォルトの名無しさん
垢版 |
2018/09/05(水) 22:33:13.01ID:M4l8cD2I
埋め込みオブジェクトってVBA的にどうにか役に立たせられないものか
dllを埋め込んでスタティックライブラリ化できれば嬉しいんだががが
2018/09/05(水) 23:14:39.04ID:gtpSZGl0
>>731
使う側が1ファイルに見えれば提供側は別に複数でもかまわんだろ
それに一度埋め込んだならメンテする手間は同じやぞ?
埋め込む前は複数ファイルなわけだしな
2018/09/05(水) 23:27:51.35ID:gtpSZGl0
シェルのヒアドキュメントも埋め込み時はひと手間掛かるし
1ファイルに収める場合はどの方法でも手間は掛かるよ
VBAだとその手間がちょっと増えるだけ
2018/09/05(水) 23:29:27.24ID:Thm6ImT5
>>736
VBAは使う側がメンテするのだが?
2018/09/05(水) 23:31:17.63ID:gtpSZGl0
>>738
だから一度埋め込んだらメンテする手間は同じだってば
想像力ないの?
2018/09/05(水) 23:34:32.56ID:gtpSZGl0
メンテ要員「このデータどうやって作成したん?」
俺「このバッチ叩くとファイルがデータに変換されるからそれ埋め込んでね」
メンテ要員「あーわかった」
2018/09/05(水) 23:41:05.25ID:Thm6ImT5
そのバッチをエクセルと一緒に配布するのか?それじゃ2ファイルじゃないか
メンテする人は、え?1ファイルでいいのになんでわざわざバッチ実行して、ファイル増やすんですか?意味わからないです、普段使ってる開発環境で編集したいですって混乱してしまうぞ
想像力を働かせろ、運用している現場をイメージしろ
2018/09/05(水) 23:54:36.64ID:gtpSZGl0
>>741
埋め込む前は複数ファイルなんだからその時点で君の主張は破綻してるんだよ
必要ならそのバッチもVBAで作ってエクセルに突っ込んどけ知能遅れ
2018/09/06(木) 00:00:52.16ID:bUttQEUW
つまりVBAは埋め込みリソースも自然に扱えないのですか?
2018/09/06(木) 02:21:31.81ID:nwR3CQ3P
変にVBAなんか組むよりバイトとかパートの人にアナログに作業させた方が早かったりもするよね
自分の時給の1/4とかだし、1時間コード打つのにかかるんなら、彼らが4時間を超える作業量でないと損になる
2018/09/06(木) 03:25:40.20ID:OdtAawkS
一回で終わる作業なら大抵はVBAなんか要らんだろ
繰り返す定型作業だからVBAで自動化する
2018/09/06(木) 08:11:47.78ID:IZEn+era
>>744
今回の場合は手作業でできるものじゃない。
それに、そんなことして良いのかの回答もまだ得られていない。
2018/09/06(木) 08:15:14.96ID:IZEn+era
>>743
まずさ、その埋めこみリソースとやらの定義をきちんとしてほしい。
君がどういうレベルの質問をしているのか分からん。

ブックの仕様ではそういうものを扱えることになってんの?
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。