Excel VBA 質問スレ Part62

■ このスレッドは過去ログ倉庫に格納されています
1
垢版 |
2019/06/24(月) 00:21:37.48
!extend:checked:vvvvv:1000:512

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

※前スレ
Excel VBA 質問スレ Part61
http://mevius.5ch.net/test/read.cgi/tech/1556203263/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
769デフォルトの名無しさん (ワッチョイ 417c-rPVV)
垢版 |
2019/08/25(日) 00:24:58.63ID:0CQCtKXC0
>>768
エンコーディングに問題があるために正常に文字列として抽出できない状態です。
PDF変換をOS XのQuartz経由で行っているのが原因でしょう。
画像に変換してからテキスト抽出するのがいいでしょう。
770デフォルトの名無しさん (スププ Sd9a-MGS/)
垢版 |
2019/08/25(日) 08:41:11.09ID:OUvv1Qufd
そんな事をVBAでする必要ある?
お前らが良く言う適材適所はどうなった?
2019/08/25(日) 09:59:52.06ID:vWh3PKjN0
>>769
いや、書式ごとコピーすれば文字化けしないから、
取り出し方の問題だと思ってる。

>>770
何ならいいの?
会社のだから、好き勝手インストールできないので、
VBA、VBS、JSくらいしか選択肢無いんだけど。
2019/08/25(日) 11:12:17.03ID:lhXU2LAa0
Acrobat入れて貰えるならもうちょっと頑張ろうぜ
2019/08/25(日) 11:15:37.82ID:wuTzbvLf0
Acrobatってphotoshopみたいにjs使えなかったっけ
VBAでPDFはしんどいだろう
774デフォルトの名無しさん (ワッチョイ 417c-rPVV)
垢版 |
2019/08/25(日) 12:11:56.92ID:0CQCtKXC0
Excelに落とし込むならVBA。事務の現場ではでjsをメンテできる人は少ないから会社では使えない。
VBAでやる必要があるかというよりも、システムに頼むと金も時間もかかるし、環境的にExcelしか使う方法がないという感じだよ。
2019/08/25(日) 12:25:55.53ID:BUsnCBPl0
>>764
その望む動作をするマクロをforで指定行まで2行ごとに繰り返す
2019/08/25(日) 18:55:03.24ID:vWh3PKjN0
>>773
使える。
というか、実際VBAだけじゃきついので、VBAの中で使ってるわ。
tmp = "var tmp = ○○○"みたいな、変な書き方になるけど。
2019/08/25(日) 19:15:04.48ID:wuTzbvLf0
>>776
evalみたいに使っているのね
それが正解だと思う
778デフォルトの名無しさん (ワッチョイ 417c-KNIi)
垢版 |
2019/08/27(火) 21:43:59.58ID:12PwAtNh0
Excel VBAだけでDBの構築って出来ますか?出来るとしたらどんな方法がありますか?
2019/08/27(火) 21:54:06.25ID:WoMQ7lMm0
ないよ
たった行列が10億だか100億程度で上限があるから
2019/08/27(火) 21:55:12.05ID:l/owAi2u0
シートにテーブル作ればいいだけじゃないかな
2019/08/27(火) 22:09:51.27ID:sJEUu/BYa
あ、そういう質問なの?
てっきりOracleとかMySQLのインストールやセットアップ、テーブルセッティングをキーストロークとかで自動化したいって話だと思った
2019/08/27(火) 22:10:09.55ID:oi7M6oV+0
>>779
まるでDBサーバには制限がないみたいな物言いだな
783デフォルトの名無しさん (ワッチョイ cd8e-2c6d)
垢版 |
2019/08/27(火) 22:19:55.46ID:OQSCjaIT0
馬鹿にマジレスか
784デフォルトの名無しさん (ワッチョイ 21cf-Q35w)
垢版 |
2019/08/27(火) 22:55:47.76ID:6Z6gO9EQ0
Excel 2007/2010で不思議な現象に出くわしています

以下のコードを標準モジュールに書きます

Sub main()
  Cells(1, 1).Interior.Color = vbRed
End Sub

Alt + F8で「main」マクロを実行すると「A1セル」が赤色に塗られます

ところが

function main()
  Cells(1, 1).Interior.Color = vbRed
  main = ""
End function

このような関数を作り、ワークシート内で使用すると
「#VALUE!」が戻ってきてA1セルも赤色に塗られません。

「Cells(1, 1).Interior.Color = vbRed」の箇所をコメントアウトすると関数は正常に動作します
Functionプロシージャ内部ではセルの背景色を変えるなどの処理は出来ないのでしょうか?
785デフォルトの名無しさん (ワッチョイ 417c-KNIi)
垢版 |
2019/08/27(火) 23:05:57.02ID:12PwAtNh0
初心者で申し訳ないんですけど、Excelだけだとシートにテーブルを作って、VBA でデータ入力したり、更新したりするってことなのかな
DBっていうとAccessとか使うしかないってこと?
2019/08/27(火) 23:09:31.93ID:sJEUu/BYa
DBってなんの話ししてるかまじでわからん
エクセルをデータベースのように使いたいって話し?
2019/08/27(火) 23:18:51.14ID:l/owAi2u0
>>785
入力とかシート上でできることはわざわざVBAでしなくてもいいんじゃないの、入力フォームが欲しいとか言うんでなければ
2019/08/27(火) 23:21:53.49ID:l/owAi2u0
複雑なデータ抽出とか更新処理はVBAでやらないと大変なんじゃないかね
2019/08/27(火) 23:25:26.42ID:8LX/iGEV0
DBを構築して何をやりたいのか
2019/08/27(火) 23:44:42.74ID:Jze2yq7b0
adodbやadox使えばaccess買わなくてもmdb使えるし
MS-SQLExpressなんかもタダで使える
791デフォルトの名無しさん (ワッチョイ 417c-KNIi)
垢版 |
2019/08/28(水) 00:58:46.20ID:5ekiJuZi0
>>790
ありがとうございます!これのことだと思います。調べてみます
2019/08/28(水) 00:59:49.87ID:v0kWonca0
>>784
その通り、ワークシートから呼び出された関数からは別のセルは加工できない仕様になってる
2019/08/28(水) 03:05:45.46ID:Ttu8EBlV0
>>784
状態変える処理やるとそこで強制終了するね
エラーでキャッチもできないし
794デフォルトの名無しさん (スプッッ Sd9a-MGS/)
垢版 |
2019/08/28(水) 10:32:02.44ID:i0zGkAfmd
Excel以外は会社の縛りで入れちゃダメって設定だったろ?
2019/08/28(水) 11:04:52.35ID:xlt6w80MM
>>794
( ゚д゚)ポカーン
796デフォルトの名無しさん (ワッチョイ cd9b-iCeB)
垢版 |
2019/08/28(水) 12:15:47.11ID:2Ou8kvzb0
>>792-793

Cells(1, 1).Interior.Color = vbRed を

Cells(1, 1).Font.Color = vbRed

にすればちゃんと動くんだがなあ

残念
2019/08/28(水) 13:03:44.86ID:lngkMUR1d
>>794
普通はAccessも入ってるもんだが。
2019/08/28(水) 13:06:36.95ID:lngkMUR1d
>>796
実施後にセルの色を変える処理を呼び出せば少し高度だけど可能。
SetTimerを使う。
2019/08/28(水) 18:08:37.69ID:5E+IOBSnM
>>797
Access外す所多いよ
800デフォルトの名無しさん (ワッチョイ fa94-MGS/)
垢版 |
2019/08/28(水) 20:25:09.97ID:ljeEb3Lh0
DBと言われてaccessだと思う人って少ないよね
2019/08/28(水) 21:11:17.18ID:CSbIlVLR0
>>800
でしょうね
でも、DBのフロントエンドなら私としては断然ACCESS

office365に移行した会社増えてるみたいだから、実は使えるようになってますって人もいるんじゃないかな
2019/08/28(水) 21:14:21.69ID:V6K8kQhZM
DBと言えばaccessと思う人って多いよね
2019/08/28(水) 21:17:52.13ID:KZSjYbkvM
そしてデフォルトで使ってうっかり誤操作してデータ壊すまでが洗礼
トランザクションとは
2019/08/28(水) 22:59:00.75ID:AiVdwxrR0
DBZ
2019/08/28(水) 23:22:20.08ID:QYwDb2se0
>>802
エンジンはWindowsに標準で入っているから
メモ帳があれば使えるDBだし
2019/08/28(水) 23:31:35.60ID:tqyYzyWN0
DBがOS標準で入ってるのは知ってるんだけど
じゃあaccessって何のために存在しているの
2019/08/28(水) 23:37:37.32ID:QYwDb2se0
フォーム、レポート、クエリーエディタ
データシートビューでも連結テーブル表示できるし
Excelと違って型チェックする必要ないから楽だぞ
2019/08/28(水) 23:42:20.06ID:CSbIlVLR0
>>806
DBだけじゃないから
2019/08/29(木) 02:07:43.21ID:HAQEZgo2x
PowerQuery使えばいいのに
810796 (ワッチョイ 619b-4hip)
垢版 |
2019/08/29(木) 09:59:11.11ID:VCulxt3G0
> Cells(1, 1).Interior.Color = vbRed を
>
> Cells(1, 1).Font.Color = vbRed
>
> にすればちゃんと動くんだがなあ

と書いたが、Excel2007だとダメだな
やっぱFunctionプロシージャ内でセルの状態を変化させるのはご法度ということか

>>798
SetTimer調べてみたけど想像も付かん
良ければ教えて下さい
811デフォルトの名無しさん (ワッチョイ 1b8c-OHvC)
垢版 |
2019/08/29(木) 11:59:18.65ID:5gorWdce0
>>796
>>798
どういうこと?
具体的な例をにfunctionから貼ってくれ
2019/08/29(木) 14:14:31.26ID:unFZw31s0
>>784 >>810
Excel のユーザー定義関数の制限について
http://support.microsoft.com/kb/170787/ja
2019/08/30(金) 09:41:25.60ID:Jl3VomiYM
相互参照をアクティブにする方法はどうしますか?

book1でbook2のとあるセルの値を取得、
book1でその値を元に計算した結果のセルをbook2で参照して取得したいです。
両方のブックを開いてるとリアルタイムで連動しますがbook1を閉じるとbook2が連動しなくなってしまいます。

何とかしてbook2だけ開いてても動くにはどうすればよいですか。
2019/08/30(金) 09:56:38.22ID:GG5C7GdFr
csvから特定のカラムを取得してレポート用資料作成をしたいです
それぞれ値を取る際にFormatしたり、キーを取って別シートを参照して値取ったりしてますここらへんをfunctionで纏めて呼び出し元に返したいのですが、複数の意味ある値を返す際どういった形式にするのが良いのでしょうか
リストだと煩雑すぎますし利用する際に中のデータ構造を正しく理解する必要があるので辛いです
815デフォルトの名無しさん (ワッチョイ a991-cmxz)
垢版 |
2019/08/30(金) 10:17:51.52ID:PgWDE7Wr0
>>810-811
ちょっと余計なことを言ったかなと反省している。
SetTimerは使い方を間違えるととても危険なので、
仕組みが分からない人は使わないほうが良い。

Private Declare Function SetTimer Lib "user32" _
(ByVal hWnd As Long, _
ByVal nIDEvent As Long, _
ByVal uElapse As Long, _
ByVal lpTimerFunc As Long) As Long
Private Declare Function KillTimer Lib "user32" _
(ByVal hWnd As Long, _
ByVal nIDEvent As Long) As Long
Private rngTarget As Range
Public Function main()
Dim hWnd As Long
hWnd = Application.hWnd
Set rngTarget = ActiveCell
Call SetTimer(hWnd, 1, 100, AddressOf TimerProc)
End Function
Private Function TimerProc _
(ByVal hWnd As Long, _
ByVal msg As Long, _
ByVal wParam As Long, _
ByVal lParam As Long) As Long
Select Case wParam
Case 1
rngTarget.Value = ""
rngTarget.Interior.Color = vbRed
Call KillTimer(hWnd, 1)
End Select
End Function
2019/08/30(金) 13:25:34.95ID:APUVZm9H0
>>815
おお素晴らしい

質問ですがTimerProcの引数はどこから渡されてるのでしょう?
ネットのサンプル見ると引数なしにしてるのが多いようですが
2019/08/30(金) 19:47:25.71ID:x/QGo0CV0
>>813
リンク更新じゃだめなん
2019/08/31(土) 09:16:24.02ID:4NYR4ZtbM
>>817
相互参照だから開いてない方のbookの値が更新されないんです

【book1】
A1=book2.A1
A2=A1*2
【book2】
A1=1
A2=book1.A2

こんな感じになってて、book2だけ開いてる状態でA1を2にしたらA2が4になるようにしたいです。
2019/08/31(土) 09:24:05.84ID:APli5DXY0
片方のbook開いたら他方のbookも裏で開くようにするしか
820デフォルトの名無しさん (ワッチョイ 619b-4hip)
垢版 |
2019/08/31(土) 09:39:57.73ID:VV+Xb8B+0
VBAは奥が深くて面白いね
でもすでに同じ構文のVB6が終了して19年
いつまでExcel VBAは前世紀の言語仕様で戦い続けるんだろうね
2019/08/31(土) 09:56:21.35ID:4OmVCRqb0
西暦2100年 そこにはいまだにVBA を書く社畜の姿が
2019/08/31(土) 10:01:54.51ID:4NYR4ZtbM
>>819
こんな感じにデータベースファイルみたいなのが100個くらいのbookに分かれてるんですよね
それを1個のbookで参照・集計してアナライズしたいんですけど
自分で書いててアレなんですけどやっぱ明らかにexcelでやることじゃないんですよねーwwもうどうしようかしらん
2019/08/31(土) 12:03:18.46ID:lSinYyRY0
>>820
デカくて潰せない会社と同じ
批判はあっても存続
他言語導入でも併存

他言語になっても、新たに覚え直す程の魅力がなければワザワザ移行しない
そんな言語があるとも思えない
824デフォルトの名無しさん (ワッチョイ d168-7DQc)
垢版 |
2019/08/31(土) 13:10:01.15ID:VMH9fC9A0
もう既に基本的なことはpythonのopenpyxlで叩く方が楽だけどなw
2019/08/31(土) 13:27:16.71ID:XD/oUD8U0
pythonは入れだけでつらいから
2019/08/31(土) 13:54:41.11ID:uJ0dNnnu0
>>818
まず、kore互いに参照し合う構成にすること自体が間違ってる
book2のA2はbook2のA1*2でいいんじゃないのか
2019/08/31(土) 13:56:14.97ID:uJ0dNnnu0
Excelは互いに参照し合う構成にすること自体が間違ってる
2019/08/31(土) 14:33:22.19ID:4NYR4ZtbM
>>827
book1に1日目のりんごとみかんの売り上げ個数が書いてある
book2に2日目のりんごとみかんの売り上げ個数が書いてある

book3で1日目と2日目のりんごとみかんの売り上げを表示したい、またbook3で書く売り上げに用いる消費税というパラメータを定義してある

こんな構成の時ってどうすればいいの?
今はbook1とbook2でbook3の消費税パラメータを参照して計算して、book3で計算結果を吸い上げてる
2019/08/31(土) 14:39:04.14ID:4OmVCRqb0
横からだが、その構成途中で値上がりしたときにやばくないか?
2019/08/31(土) 14:41:09.90ID:uJ0dNnnu0
>>828
book3が最終形態ならbook1とbook2から個数を参照してbook3で料金計算
2019/08/31(土) 14:58:39.86ID:4NYR4ZtbM
>>829
例えなので、実際は単価が上がることはなく、種類は100種類程度のデータです。
book3で全日付のデータ吸い上げて1日の売り上げ個数をbook3の別シートに仮保存して計算というのもしましたが、
日数分だけシートが増えてくので、。
欲しいのは売り上げ金額だけなので、無駄なデータは増やしたくないのですが・・
2019/08/31(土) 15:29:32.08ID:uJ0dNnnu0
>>831
なら尚更構成見直した方がいいと思う
なんであっち見たりこっち見たりするんだ…
2019/08/31(土) 20:18:57.86ID:7dtMEd8i0
教えてください
ctrl+cでセルを値でコピーするのと同時に、セルか文字に色をつけたいのですがなかなか作れません
ヒントあれば教えて下さい
2019/08/31(土) 20:25:39.22ID:uJ0dNnnu0
>>833
色だけコピーしたいと言ってんの?
2019/08/31(土) 20:38:21.36ID:7dtMEd8i0
>>834
いえ、コピーしたセルがわかるように色付けしたいです
2019/08/31(土) 20:44:10.45ID:/30jKMss0
>>833
マクロを
・色付
・コピー
にしてショートカットに登録

ctrl+cではなくそのショートカットでコピーする
2019/08/31(土) 20:51:57.67ID:mwn+tPL8M
>>832
どう見直しても解決出来そうになくて・・
そんなに特殊ケースでもないと思うのですが、世間の人々はどんな構造にしてるのでしょうか。
2019/08/31(土) 20:52:51.76ID:7dtMEd8i0
>>836
ありがとうございます。
ctrl+cでやるのは無理なんですか?
2019/08/31(土) 21:41:30.00ID:lSinYyRY0
>>838
作ったマクロを ctrl+cに割り当ててみ
2019/08/31(土) 21:44:06.08ID:uJ0dNnnu0
>>837
日報と同じファイルに単価とか共通の固定データ用のシートを1個作る
日報がどんなレイアウトか知らないが↓みたいなのと仮定する
      8/1 8/2…
 りんご 
 みかん
sumifで1日分の個数を取得×Vlookupで単価取得
個数のファイル名はyyyymmddとかにして数式コピペできるようにしとく
2019/08/31(土) 21:46:45.55ID:uJ0dNnnu0
日報て集計用のファイルな
842デフォルトの名無しさん (ワッチョイ 618e-H6Z7)
垢版 |
2019/08/31(土) 23:13:48.46ID:E/xtib8g0
>>833
死ね、クズ
2019/09/01(日) 02:37:04.86ID:f6WC1Fpm0
>>842
すみません
2019/09/01(日) 04:01:41.09ID:raK4RKwa0
コピーはCtrl+Cだけとは限らないからクリップボードを監視して
対象のシートがアクティブな間に状態が変わったら選択セルに色を付けるだけ
個人で使うだけなら適当でいいんじゃないの
2019/09/01(日) 13:44:49.90ID:oYMe9uNQ0
Ctrl+Cでやりたいと言ってるんだから面倒なことしなくていいと思うが
2019/09/03(火) 17:37:57.38ID:O78IIFeuM
A1を始点に行方向に5,列方向に4の間隔で格子状に存在するセルの先頭の文字だけを赤くしたいのですがどうやれば可能ですか?
2019/09/03(火) 17:50:49.52ID:7wvhOHEP0
>>846
Sub Macro1()
  For r = 1 To 100 Step 5
    For c = 1 To 100 Step 4
      Cells(r, c).Characters(Start:=1, Length:=1).Font.Color = vbRed
  Next c, r
End Sub
2019/09/03(火) 18:00:40.88ID:MrrInpM90
今日、Excelの表で手動でソートしてたら変な挙動が現れ、原因が分からず困ってしまい…

まず、「状況」列に、「完走」と「未達成」のデータがあるのですが、
この列を昇順ソートすると、「未達成」の上と下に「完走」が分かれてしまいました
もちろん降順ソートも同様です

で、この上下の「完走」を別のシートにコピペで貼り、挙動をチェックしてみましたが…
 https://i.imgur.com/FXwnn0h.jpg

上のリンクでも書いていますが、文字自体はif文でもフィルターでも同一扱いです
(ソートの時だけ、なぜか違いが出ています)

思い当たる違いは入力の仕方で、手打ちしたものとマクロ(VBA)で入力した違いがあります
マクロを作って以降はマクロで入力してますが、それ以前のデータは手打ち&コピペで入力しました

とりあえずの対処法として、マクロで入力した文字を全てにコピペすればこの問題は解決しますが
今後のこともあり、なにか見落としている点や抜本的な対策がないか、
何かアドバイスを頂ければと思い質問しました。

なお、これは仕事とかじゃなくて趣味でやってるものです
あと、使ってるのは Excel2007 で、ちょっと古いバージョンです

以上、よろしくお願いします
2019/09/03(火) 18:37:10.54ID:Nde2KJgsM
>>848
ふりがな?
2019/09/03(火) 19:03:22.22ID:MrrInpM90
>>849
それでした!

「Excel、ソート、ふりがな」でググると出てきました
https://whiteleia.com/%E3%82%A8%E3%82%AF%E3%82%BB%E3%83%AB-%E4%B8%A6%E3%81%B9%E6%9B%BF%E3%81%88-%E3%82%BD%E3%83%BC%E3%83%88-%E3%81%A7%E3%81%8D%E3%81%AA%E3%81%84-%E6%BC%A2%E5%AD%97/

Sortオブジェクトで並べ替えを実行する
http://officetanaka.net/excel/vba/tips/tips148c.htm

いろいろ見てみると、Excelでソートをする際の(隠れた?)重要事項のようですね
(見えない「ふりがな」で漢字も正しくソート!、親切な機能ですが…やめてくれ〜!!)
2019/09/03(火) 19:08:44.32ID:EgS4pbLB0
>>850
大を「おおきい」で変換するか「だい」で変換するかで位置が変わるのと同じやね



大 (おお)


大 (だい)
2019/09/03(火) 19:09:53.69ID:Sk67xQLY0
シュワルツ変換じゃないんだな
やばいね
2019/09/03(火) 19:30:59.43ID:Nde2KJgsM
>>850
デフォで ONなのがあかんよね
2019/09/04(水) 03:28:35.08ID:PLINbL3A0
ふりがなは集計とかで計算が合わない原因の1つ
非常にヤバイ
855デフォルトの名無しさん (ワッチョイ 138a-SEqO)
垢版 |
2019/09/04(水) 04:06:51.76ID:5yA34Y3d0
俺ならorder byでソートするわ。
856デフォルトの名無しさん (ワッチョイ 138a-SEqO)
垢版 |
2019/09/04(水) 04:06:51.76ID:5yA34Y3d0
俺ならorder byでソートするわ。
857デフォルトの名無しさん (ワッチョイ 138a-SEqO)
垢版 |
2019/09/04(水) 04:10:04.07ID:5yA34Y3d0
あ、勝手に2回書き込まれた。
2回押したわけじゃない。(時間が同じ)
2019/09/04(水) 06:58:53.39ID:PNtZQbdAM
同時にマルチポストするスクリプトのテストなんでしょ?わたししってます
859デフォルトの名無しさん (スッップ Sd33-SEqO)
垢版 |
2019/09/04(水) 09:41:13.02ID:1XDrwIL8d
それ何の意味があるの?
2019/09/04(水) 21:10:47.96ID:4b6r0UgTM
utf8でテキストファイルを読み書きするにはADODB.Stream使うしか無いんですか?
861デフォルトの名無しさん (ワッチョイ 618e-MFs0)
垢版 |
2019/09/04(水) 22:19:41.54ID:ypD8R0G80
>>860
お前にはできないだけ
2019/09/04(水) 22:43:43.48ID:eueOikzy0
>>860
テキスト取り込み機能の、文字コードの選択肢に、
普通にUTF-8入ってるけど。
2019/09/05(木) 05:41:49.26ID:1Vq29uWMM
>>862
詳しく
2019/09/05(木) 19:27:53.95ID:Y46IXGuk0
>>863
データ → テキストまたはCSVから → テキストファイル選択 → インポート → 元のファイル「65001:Unicode (UTF-8)」

バージョンによって、多少表記は違うと思うけど。
2019/09/05(木) 20:11:50.19ID:ETKINaX/M
>>864
ありがと、試してみる。

utf8でファイルへ書き出す方法はある?
ADODB.Stream以外で。
2019/09/05(木) 21:14:36.97ID:1LX1rV/Ud
>>865
なぜDODB.Streamを避ける?参照設定ならVBAで追加できるぞ
2019/09/05(木) 21:28:31.64ID:ETKINaX/M
>>866
ゴメン、それをここで議論するつもりは無いんだ。
utf8でテキストファイルを読み書きするにはADODB.Stream使うしか無いのか知りたいだけ。
2019/09/05(木) 21:35:39.87ID:AYUgwyUQM
言い直す。
utf8でテキストファイルを読み書きするのにADODB.Stream以外の方法があれば知りたい。
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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