Excel VBA 質問スレ Part45 [無断転載禁止]©5ch.io
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2017/01/03(火) 02:51:16.56ID:9Y8iTik6コード書き込みや作成依頼もOK
※前スレ
Excel VBA 質問スレ Part44
http://echo.2ch.net/test/read.cgi/tech/1479421482/
※関連スレ
VBAなんでも質問スレ Part2
http://echo.2ch.net/test/read.cgi/tech/1432173164/
Access VBA 質問スレ Part1
http://echo.2ch.net/test/read.cgi/tech/1328536426/
Excel総合相談所 125
http://echo.2ch.net/test/read.cgi/bsoft/1481369538/
0288デフォルトの名無しさん
2017/01/22(日) 23:43:51.53ID:Wwv6/pAu何がなんだかさっぱり
0289270
2017/01/23(月) 00:41:20.21ID:U6yzB2m0>>287 様
お手数掛けてしまい申し訳ありませんが、どちらも動きませんでした…
「ファイルが見つかりません」とエラーメッセージが出てしまいます。
0290デフォルトの名無しさん
2017/01/23(月) 00:55:01.54ID:ST2LRMx20291デフォルトの名無しさん
2017/01/23(月) 01:08:05.39ID:ayLfxszv適切に弄った上で見つからないのかな
0292デフォルトの名無しさん
2017/01/23(月) 01:55:52.05ID:sOYRMmGw0293デフォルトの名無しさん
2017/01/23(月) 04:46:02.80ID:WP/2JyPJhttp://i.imgur.com/wCOzgx4.png
もちろん最初のフォルダ定義は書き換えたよな?
そこ以外はフォルダ名もファイル名もディスクから読み取ってるんだから、見つからないわけがないんだが
0294デフォルトの名無しさん
2017/01/23(月) 04:51:29.77ID:WP/2JyPJVBAに対応したサイトは見たことないけど、
RangeとかCellsがハイライトされないと困る用途でなければVBを選択してみたら?
0295デフォルトの名無しさん
2017/01/23(月) 04:53:06.02ID:WP/2JyPJ0296270
2017/01/23(月) 06:51:27.51ID:U6yzB2m0>>293 様
別のサンプルで試したところ、きちんと動作いたしました。
最初に用意したサンプルの部署の名前にシステム外?の漢字が使われていた為に失敗していたようです。
(ひらがなの「が」が、「か+゛」になっていたという。Mac←→Winの文字コードの違いの問題?)
そちらはなんとかなるので、これで問題解決です。
皆様方、ありがとうございました。
0297デフォルトの名無しさん
2017/01/23(月) 08:12:32.04ID:sOYRMmGwなるほど! ありがとうございましたm(__)m
0298デフォルトの名無しさん
2017/01/23(月) 12:58:13.38ID:Z+1qxvbautf-8 は、濁点半濁点を分離しない
一方、utf-8-mac は、濁点半濁点を分離して、別の文字とする
0299デフォルトの名無しさん
2017/01/23(月) 15:48:10.56ID:r+jEG7u3HTMLで要素を特定するのが難しい複雑なWEB GUIを自動操作したく、キーボード入力のみ(TAB、ENTER、文字入力の組み合わせ)で原始的に操作すればいいんじゃないかと考えました
このような方法は効果的ですか?
またIE画面の取得やSendKey、busy状態の判定などはurlさえあれば可能なのでしょうか?
0300デフォルトの名無しさん
2017/01/23(月) 16:25:14.53ID:dyeHk94Y> HTMLで要素を特定するのが難しい複雑なWEB GUIを自動操作したく、キーボード入力のみ(TAB、ENTER、文字入力の組み合わせ)で原始的に操作すればいいんじゃないかと考えました
> このような方法は効果的ですか?
「効果的」の意味が良くわからないが、確実性に欠けるので実装方法としては下策。
0301デフォルトの名無しさん
2017/01/23(月) 18:23:23.13ID:iz5/M2l3何故HTMLで要素を特定するのが難しいのか?
あとそれが難しいのにキーボード操作なら目的の操作を出来るのは何故か?
効果的かどうかどうやって判断するのか?
0302デフォルトの名無しさん
2017/01/24(火) 09:50:42.62ID:Q9g90nxH>>301
回答ありがとうございます
効果的か、というのは他に楽ないい選択があるか、という意味です
初心者なので要素の取得に時間がかかり、単純なWEBページならなんとか操作できるのでが
ジャバの記述でソースコードがぐちゃぐちゃになっており要素の取得がしんどいです
実際のie操作を記録してコード組んでくれるソフトとか無いんですかね
0303デフォルトの名無しさん
2017/01/24(火) 11:44:50.88ID:tZ08PDgQUWSC
0304デフォルトの名無しさん
2017/01/24(火) 12:51:19.59ID:2vJhPAHlブラウザでF12キーとか押してみたら
0305デフォルトの名無しさん
2017/01/25(水) 01:50:28.88ID:mqe1OJqxコスモ関数とか。
Subを廃止にして、Zamとかどうよ。
Ifも古くなってきたから、Izuとか。
0306デフォルトの名無しさん
2017/01/25(水) 04:02:53.45ID:IbVYSEZD0307デフォルトの名無しさん
2017/01/25(水) 15:39:29.51ID:Lt8lAI1lエクセルに画像挿入する際の質問です。
エクセルに大量の画像を挿入したいのですが、ファイルが重たくなりすぎるためリン
ク挿入を考えています。
ファイルをCDにやいて先方に渡したいので、絶対パスではなく相対パスでの画像挿入
がしたいです。
エクセルファイルと大量の画像データは同じフォルダ内にあります。
Insertで挿入してもaddpictureで挿入してもメディアにフォルダごと移動したとたん
リンク切れになるので困っています。
よろしくお願いします。
0308デフォルトの名無しさん
2017/01/25(水) 17:01:41.71ID:IbVYSEZDなぜhtmlにしないの?
0309デフォルトの名無しさん
2017/01/25(水) 17:35:49.92ID:ekWp7cd2例えば B5 セルの値が、15 10 23 5
と変化したら、隣のC5のセルに、 23 と表示させたいのです。
エクセルの関数になるのかもしれませんが、ググってもどう調べても分かりません。
皆さま何卒宜しくお願い致します。
0310デフォルトの名無しさん
2017/01/25(水) 17:53:01.54ID:vlkVtG3bその要件は >>307 のどこにあたるの?
0311デフォルトの名無しさん
2017/01/25(水) 18:08:36.73ID:ncsczmSYhtmlとして保存とかできなかったっけ
0312デフォルトの名無しさん
2017/01/25(水) 19:35:21.34ID:mqe1OJqxリンク切れになる理由はわからんけど、
ファイルを開いた時に、リンク解除→再リンクすればいいんじゃないの?
0313デフォルトの名無しさん
2017/01/25(水) 21:13:17.06ID:CnexM6ZXえっ?
0314デフォルトの名無しさん
2017/01/25(水) 21:38:36.75ID:eyqKHvfT対象のセルがひとつだったらグローバル変数を使って簡単にできる
Private max__ As Double
Function getMax(ByVal x As Double) As Double
If max__ < x Then max__ = x
getMax = max__
End Function
セルC5に
= getMax(B5)
と入れときゃいい
0315デフォルトの名無しさん
2017/01/25(水) 21:41:05.43ID:eyqKHvfTSub resetMax()
max__ = -1.79769313486231E308
End Sub
とかが必要かもしれない
0316デフォルトの名無しさん 転載ダメ©2ch.net
2017/01/25(水) 22:18:36.62ID:eU88gsvp板復帰(OK!:Gather .dat file OK:moving DAT 540 -> 537:Get subject.txt OK:Check subject.txt 540 -> 539:Overwrite OK)2.94, 2.24, 1.93
age subject:539 dat:537 rebuild OK!
0317デフォルトの名無しさん
2017/01/25(水) 22:49:29.44ID:CnexM6ZX要らないです
0318デフォルトの名無しさん
2017/01/25(水) 22:54:53.11ID:eyqKHvfTほう、なぜ?
0319デフォルトの名無しさん
2017/01/25(水) 23:05:36.18ID:AeM3WiQW0320デフォルトの名無しさん
2017/01/26(木) 01:27:18.15ID:lerVaKyH0321デフォルトの名無しさん
2017/01/26(木) 08:19:49.57ID:ZDwsAfth一回目の値取り込めは必須だから。
この場合は15は必ず最大値。
0322デフォルトの名無しさん
2017/01/26(木) 08:27:33.82ID:GoiJIG7TB5が全部マイナスのケースは?
0323デフォルトの名無しさん
2017/01/26(木) 09:20:45.29ID:ZDwsAfthあーその場合があったか!
いやー失敬失敬
な訳ない。
一回目は絶対最大値なんです。
この場合正負は、なんの意味がない。
0324デフォルトの名無しさん
2017/01/26(木) 09:50:34.79ID:8Qm9FYvM君が想定してるコードは >>314 なの それとも別のコード?
0325デフォルトの名無しさん
2017/01/26(木) 10:02:08.25ID:mPWEbfd1>>314のグローバル変数はDouble型だから何もしないと初期値は0.0だ。
これが何を意味するかはわかるな?
0326デフォルトの名無しさん
2017/01/26(木) 10:09:43.56ID:oMPl1Srsこれは恥ずかしい
0327デフォルトの名無しさん
2017/01/26(木) 11:12:41.51ID:KR9GJXBK>>325
>>326
314は考慮してない。
315のように型考慮とか手間。
0328デフォルトの名無しさん
2017/01/26(木) 11:17:55.57ID:SSl970Brそもそも会話に参加してなかったってことは理解した
0329デフォルトの名無しさん
2017/01/26(木) 11:28:23.97ID:mPWEbfd1型考慮が手間?
じゃあVariantにすればいい。Emptyであれば未初期化状態とわかるからそこで分岐できる。
そもそもなんのデータなんだ?
気温とかで最高気温をとりたいというならずっとマイナス値で推移することもあるし、
株価とかの最高値をみたいというなら正数だけ考えればいいし。
0330デフォルトの名無しさん
2017/01/26(木) 11:52:33.91ID:KR9GJXBK正しい
>>329
観点そこじゃねーよ
イチイチ型の下限をハードコーディングかよ。
何にも思わないんだw
0331デフォルトの名無しさん
2017/01/26(木) 12:00:40.09ID:mPWEbfd1使い捨ての例示だろ?
それで十分さ
0332デフォルトの名無しさん
2017/01/26(木) 12:04:08.41ID:mPWEbfd1型ごとの下限値とか一日の秒数とか、文脈で明かでかつ誰でも知っている値は本番プログラムでもなきゃそのまま例示するさ。
0333デフォルトの名無しさん
2017/01/26(木) 12:07:50.47ID:ZDwsAfthそうかもね
ただ>>309が不憫でよ。
いきなり>>314だろ。
>>315で結びが『かもしれない』
まじがんばれ>>309
0334デフォルトの名無しさん
2017/01/26(木) 12:17:36.90ID:mPWEbfd1じゃあ別な方法を示せばいい
そもそも「正負がなんの意味もない」ってどういうことだ?説明しろ。
0335デフォルトの名無しさん
2017/01/26(木) 12:31:36.89ID:SSl970Brやりようによってはグローバル変数って不要じゃないかな?
って思う
0336デフォルトの名無しさん
2017/01/26(木) 12:39:56.63ID:oMPl1Srsでも>>315に関して「一回目は絶対最大値なんです。正負はなんの意味もない」ってのは意味不明
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("B5")) Is Nothing Then
Exit Sub
Else
Range("C5") = WorksheetFunction.max(Range("B5", "C5"))
End If
End Sub
0337デフォルトの名無しさん
2017/01/26(木) 12:47:28.93ID:ZDwsAfth提示コードとは切り離す。
片手落ちの提示コードなら
初期値を型下限にしないと負側は
動かないよ。
最大値の定石算法なら正負は意味ないよ。
だって正しく求まるから。
http://d.hatena.ne.jp/geek-it/touch/20120226/p1
0338デフォルトの名無しさん
2017/01/26(木) 12:55:45.77ID:ZDwsAfthc5は試行の開始では
どういう状態なんだろうね?
0339デフォルトの名無しさん
2017/01/26(木) 12:57:50.00ID:mPWEbfd1n[0]とは何で、どうやって取得するのか教えて
0340デフォルトの名無しさん
2017/01/26(木) 12:58:02.38ID:oMPl1Srsとりあえず馬鹿ってことはわかった
グローバルにカウンタつくってIf count = 1 Then ってやっときゃいいじゃんw
0341デフォルトの名無しさん
2017/01/26(木) 13:09:31.18ID:ZDwsAfthb5からとるんだよ。
ただ
ほんとに知りたいところそこなの?
これから何を本質的に疑問に思ってる?
0342デフォルトの名無しさん
2017/01/26(木) 13:11:07.17ID:ZDwsAfthその手段で
どういった目的を達成できるか
説明お願いします。
0343デフォルトの名無しさん
2017/01/26(木) 13:16:03.48ID:mPWEbfd1B5に初めて値が(たとえば3とする)が代入されたとき、C5にはもちろん3と表示されるべきだが、それをどうやってやるの?
0344デフォルトの名無しさん
2017/01/26(木) 13:19:12.95ID:oMPl1Srsたぶん根本的に意味をわかってない
0345デフォルトの名無しさん
2017/01/26(木) 13:22:44.99ID:mPWEbfd10346デフォルトの名無しさん
2017/01/26(木) 13:24:08.19ID:oMPl1Srsだから自分でコード書いてみろって
何を勘違いしてるか自分で気づくだろ
0347デフォルトの名無しさん
2017/01/26(木) 13:26:06.34ID:oMPl1Srs0348デフォルトの名無しさん
2017/01/26(木) 13:28:19.88ID:mPWEbfd1ドンマイ
0349デフォルトの名無しさん
2017/01/26(木) 13:30:55.01ID:ZDwsAfthドンマイ
0350デフォルトの名無しさん
2017/01/26(木) 13:33:47.09ID:oMPl1Srsすまんな
コードの提示を頼むわ、飯くってくる
0351デフォルトの名無しさん
2017/01/26(木) 14:19:03.93ID:5gl79ALuWorksheet_Changeとかのイベントで
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim peak, x: peak = "C5": x = "B5"
If Not IsNumeric(Range(x)) Then Exit Sub
If Not IsNumeric(Range(peak)) Then Range(peak) = Range(x)
If Range(peak) < Range(x) Then Range(peak) = Range(x)
End Sub
セルが空でも動く
0352デフォルトの名無しさん
2017/01/26(木) 14:25:54.93ID:MANz96Le参照設定でMicrosoft Scripting Runtimeを追加して、標準モジュールに以下のコードを記述後、
C5に=showMaxValue(B5)と入力する。
'対象セルの最大値を保存する場所
Dim dic As New Dictionary
Public Function showMaxValue(cell As Range)
If IsEmpty(cell) Then
' 対象セルをクリアしたときにどう振る舞うのかを
' 決定する必要があるが、取りあえず何もしない
Exit Function
End If
If dic.Exists(cell.Address) Then
If cell.Value > dic(cell.Address) Then
dic(cell.Address) = cell.Value
End If
Else
dic.Add cell.Address, cell.Value
End If
showMaxValue = dic(cell.Address)
End Function
0353デフォルトの名無しさん
2017/01/26(木) 14:57:52.29ID:mPWEbfd1なるほど
0354デフォルトの名無しさん
2017/01/26(木) 16:21:12.51ID:U3KmvQxt>>311
>>312
ご回答どうもありがとうございます。htmlでとは全く思いつかなかったので目から鱗でした。ただ、改ページプレビューでの印刷範囲などがhtmlだとうまくできないです。
また、絶対参照になってしまうのはexcel2013以降の仕様のようなことが書いてあるサイトを見つけました。
http://www.h3.dion.ne.jp/~sakatsu/Excel_Tips21.htm#S9
結局ファイルを分けて実ファイルを挿入する方法にします。
どうもありがとうございました。
0355デフォルトの名無しさん
2017/01/26(木) 18:30:34.79ID:Cqc92u/shttps://www.youtube.com/watch?v=CTotYTOpR9E
0356デフォルトの名無しさん
2017/01/26(木) 19:37:07.62ID:3eEczd4r0357デフォルトの名無しさん
2017/01/26(木) 19:56:43.48ID:GoiJIG7Tそれって複数のセルを扱えるようにしてるだけで初期値については >>329 の Variant と本質的には一緒だよね
0358デフォルトの名無しさん
2017/01/26(木) 20:03:13.82ID:3C+35NwQなにをどうshowしてんだよw関数名で嘘つくとかサイテーだなw
0359デフォルトの名無しさん
2017/01/26(木) 20:10:27.05ID:q3eaEqve>>329のまま複数のセルで関数を使うと想定外の結果になるんだから>>352のは優れている
0360デフォルトの名無しさん
2017/01/26(木) 20:50:17.03ID:5GTFMqAx0361デフォルトの名無しさん
2017/01/26(木) 20:55:56.92ID:uLxLwJKu> 初期値については
って書いてますやん...
0362デフォルトの名無しさん
2017/01/26(木) 20:58:31.55ID:5GTFMqAxなるほど。
すマンこ
0363デフォルトの名無しさん
2017/01/27(金) 05:00:53.63ID:wqjWN3QHセル(1,1)から始まって横に 3、12、−1、6、−2など数字が続き、
マイナスだけ抽出して合計したい場合はどうすればいいでしょうか。
↓では当たり前ですがうまくいきません…
Sub test()
x = 1
Do Until x > 5
If Cells(1, x) < 0 Then
Cells(1, 6) = Cells(1, x)
End If
x = x + 1
Loop
End Sub
0364デフォルトの名無しさん
2017/01/27(金) 05:25:43.17ID:MGewCQt5マイナスだけ合計
Sub test()
x = Application.WorksheetFunction.SumIf(Rows(1), "<0", Rows(1))
Debug.Print x
End Sub
0365デフォルトの名無しさん
2017/01/27(金) 05:30:31.67ID:0Brpc+WLSub test()
Cells(1, 6) = 0
x = 1
Do While x <= 5
If Cells(1, x) < 0 Then
Cells(1, 6) = Cells(1, 6) + Cells(1, x)
End If
x = x + 1
Loop
End Sub
0366デフォルトの名無しさん
2017/01/27(金) 09:12:54.82ID:xuyo3rhoセルに"/"(スラッシュ半角)か"×"(バツ)を入力したら、
そのセルに右上がりの斜線を自動で引かれるようにしたいのですが、
コードを教えてください。
スラッシュを消したら斜線も消えるようにもしたいです。
対象はSheet1の全セルです。
よろしくおねがいします。
0367デフォルトの名無しさん
2017/01/27(金) 09:21:50.43ID:E/4Vr26G0368デフォルトの名無しさん
2017/01/27(金) 09:57:52.06ID:Ne4o/N/hそんなのより対象セルを選択した状態で {ctrl + なんとか} の方が便利だしコードも簡単になると思うけどな
0369デフォルトの名無しさん
2017/01/27(金) 12:55:33.52ID:2/l+3kL40370デフォルトの名無しさん
2017/01/27(金) 14:20:38.90ID:pYLJsuuuworksheetのchangeイベントかなんかでセルの値がかわったら罫線引くようにするしかないんじゃね
罫線の引き方はマクロの記録で調べなさいよ
0371デフォルトの名無しさん
2017/01/27(金) 19:39:13.72ID:2UbAAj3qPrivate Sub Worksheet_Change(ByVal Target As Range)
If Target.Value = "/" Then
With Target
.Borders.Weight = xlThin
.Borders(xlDiagonalUp).LineStyle = xlContinuous
End With
End If
End Sub
消すのは逆をすればいいんでない?
0372デフォルトの名無しさん
2017/01/27(金) 20:32:43.21ID:WmIjEyaD条件付き書式でいいだろ
って思ったら条件付き書式って斜め罫線ダメなんだな
他の罫線はいいのにちょっと不思議
なので Sheet1 のシートモジュールにこれを書けばいい
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Cell As Range
For Each Cell In Target
Cell.Borders(xlDiagonalUp).LineStyle = IIf(Cell.Value = "/" Or Cell.Value ="×" , xlContinuous, xlNone)
Next
End Sub
0373デフォルトの名無しさん
2017/01/27(金) 22:47:33.41ID:Fb1FgEo20374デフォルトの名無しさん
2017/01/27(金) 22:49:12.60ID:2UbAAj3qコード書きながらそう思ったよw
0375デフォルトの名無しさん
2017/01/28(土) 12:01:46.67ID:w/mx7yyO下記は調べたい書式のほんの一例です。実際に調べたい書式はもっとありますし将来的にもどんどん出てきます。
・文字列に、数字+"/"の数字を含む (例)予定は2/3
・文字列が、"平成"ではじまる (例)平成元年
・文字列に、2文字以上の空白を含む (例)I have a pen.
などなど
つまり正規表現のようなものをVBAのコードで使うときの定番ってなんでしょうか?
0376デフォルトの名無しさん
2017/01/28(土) 12:03:39.31ID:w/mx7yyOもっと短く一般的にできる方法はないかと思って。
0377デフォルトの名無しさん
2017/01/28(土) 12:07:32.57ID:BY939/WJ簡単なものなら Like演算子
本格的にやりたいなら正規表現オブジェクトを使う
正規表現オブジェクトは
"Microsoft VBScript Regular Expressions"を参照設定するか
Set RegExp = CreateObject("VBScript.RegExp")
0378デフォルトの名無しさん
2017/01/28(土) 12:21:25.10ID:w/mx7yyOなるほどLikeがござったか。ありがとう。
0379デフォルトの名無しさん
2017/01/28(土) 12:25:02.06ID:ktdFkm2m侍かな
0380デフォルトの名無しさん
2017/01/28(土) 12:27:02.94ID:w/mx7yyO0381デフォルトの名無しさん
2017/01/28(土) 12:42:49.48ID:9EkLNFiw0382デフォルトの名無しさん
2017/01/28(土) 21:50:14.17ID:d5Th95j2転職を考えているので、職場では自分だけが使うものしかマクロ化出来ない。
今のレベルの自分にオススメの書籍を教えて下さい。書店でじっくり探す時間が無いので。
今持ってるのは公式テキスト、「例題30問と演習70問でしっかり学ぶexcelVBA標準テキスト」です。
目標はぼんやりしているけど、こういうの作れない?と聞かれたら涼しい顔して作れるようになりたい。
0383デフォルトの名無しさん
2017/01/28(土) 22:22:23.13ID:F0MmKngEファウラーのリファクタリングあたりが脱初心者にオススメ
Javaで書かれてるけどVBAでも考え方は同じ
0384デフォルトの名無しさん
2017/01/28(土) 22:43:36.09ID:XFsAlNLB順番が逆なんだよ(システム屋は別だけど)
特に下っ端レベルだと、業務覚える→自動化考える→実装に必要な知識覚える。
これを繰り返すしかない
0385デフォルトの名無しさん
2017/01/28(土) 22:44:58.87ID:d5Th95j2ありがとうございます。
どちらも初めて聞いたのでググりました。
ファウラーのリファクタリング、本当に脱初心者って感じですね。何か重厚そうで少しビビります。
コードの良し悪しも、あまりにもひどいもの以外はよくわからないレベルなので
読んでみようと思います。
0386デフォルトの名無しさん
2017/01/28(土) 22:56:38.87ID:HZ4XiulJVBAで接続してそこからデータを持ってくるとかあるいはexcelのデータをテーブルに入れるとかさ。
知ってるんだったら良し、知らないんだったらフリーのRDBいっくらでもあるんだからそれ入れてADO勉強したら?
0387デフォルトの名無しさん
2017/01/28(土) 23:06:20.39ID:d5Th95j2業務覚える→自動化考える→知識覚える
これが一番なんですが、今の職場で人に影響が及ばない範囲で出来ることはやりきってしまったというか、大して出来ることが無いので。
経理の知識とVBAの知識両方で勝負したいとは思っているのですが
日商簿記2級とVBAスタンダード、どちらも中途半端過ぎて
今勉強するならどの方向かなと迷っているところです。
これ以上はスレ違いですが。
■ このスレッドは過去ログ倉庫に格納されています