Excel VBA 質問スレ Part44 [無断転載禁止]©5ch.io
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2016/11/18(金) 07:24:42.30ID:rPv8IQdAコード書き込みや作成依頼もOK
※前スレ
Excel VBA 質問スレ Part43
http://echo.2ch.net/test/read.cgi/tech/1474105211/
※関連スレ
VBAなんでも質問スレ Part2
http://echo.2ch.net/test/read.cgi/tech/1432173164/
Access VBA 質問スレ Part1
http://echo.2ch.net/test/read.cgi/tech/1328536426/
Excel総合相談所 124
http://echo.2ch.net/test/read.cgi/bsoft/1474260366/
0002デフォルトの名無しさん
2016/11/18(金) 22:43:53.96ID:vUpgzFVU横はIntegerで、縦はLongだろ。
0003デフォルトの名無しさん
2016/11/18(金) 23:16:01.73ID:POTyQWyo意味不明
0004デフォルトの名無しさん
2016/11/18(金) 23:20:31.08ID:M89IXhc00005デフォルトの名無しさん
2016/11/19(土) 00:00:26.12ID:BsNbEZ28<tab idMso="TabHome">
</tab>
等のidMso指定の中に自分用のグループは追加できるけど
<group idMso="Groupxxx">
</group>
に何を入れても表示されないです
0006デフォルトの名無しさん
2016/11/19(土) 09:59:54.32ID:DaWo6YR70007デフォルトの名無しさん
2016/11/19(土) 13:13:17.14ID:NRaI0uul0008デフォルトの名無しさん
2016/11/19(土) 14:55:14.03ID:AMITCLrOユーザーフォームでの作成ではなくてフォームコントロールでシート内に
チェックボックスを作ったのですがトルゥー先のリンクはどこにするとまとまりがいいでしょうか?
同じセル内にするとトルゥーとフォルトが表示されて見栄えが悪くシート内の関係ない箇所にリンクさせ
非表示する事でうまくいきました。
しかし、列を追加すると非表示した列も必要になってしまいます。
0009デフォルトの名無しさん
2016/11/19(土) 16:26:18.45ID:pkXYgQAm0010デフォルトの名無しさん
2016/11/19(土) 17:29:53.91ID:2YE8aYoSそのチェックボックスの 利用用途次第だろうけど
セルにリンクさせないで マクロで ON/OFF判定して処理するとか
0011デフォルトの名無しさん
2016/11/19(土) 19:24:16.13ID:mQQ7Iordれているシートの一部を選択して、別シートに
コピーしようとしています。
Range(
0012デフォルトの名無しさん
2016/11/19(土) 19:26:53.42ID:mQQ7Iord表に図形で矢印やテキストボックスが貼り付けら
れているシートの一部を選択して、別シートに コピーしようとしています。
Range().Select で範囲指定したあと、 .Copy でクリップボードへコピーして
.PasteSpecial Paste:=xlPasteAll
.PasteSpecial Paste:=xlPasteValues
で別シートへペーストしたのですが、 図形が移動できず困っています。
図形も一緒に移動させるには、どうしたら いいでしょうか?
0013デフォルトの名無しさん
2016/11/20(日) 00:35:00.27ID:FgpyMXw2オーシェイプが同じ名前が二つあると、
名前を指定して動かそうとすると、
片方しか動かないそんなVLOOKUPみたいな変な仕様ですか?
0014デフォルトの名無しさん
2016/11/20(日) 09:10:13.28ID:ImuvtlJ3ユニークに特定できない状態にする方が変じゃね
ユニークに特定する方法があると思う
名前じゃなくて番号とか
0015デフォルトの名無しさん
2016/11/20(日) 17:40:39.82ID:EDGMlnt9Shapes.Range(index)でやってる?
00168
2016/11/21(月) 11:23:10.91ID:9TYCazD4おお!ありがとう
0017デフォルトの名無しさん
2016/11/21(月) 12:56:44.72ID:DNmkrUrv逆にintegerじゃないとダメな場面ってあるの?
0018デフォルトの名無しさん
2016/11/21(月) 13:10:15.29ID:viqIP0GMN = 5 / 2: Cells(7, 9) = N →2 ・・・・・・・(1)
N = 2 / 3: Cells(8, 9) = N →1 ・・・・・・・(2)
N = 5 \ 2: Cells(9, 9) = N →2 ・・・・・・・(3)
N = 2 \ 3: Cells(10, 9) = N →0 ・・・・・・・(4)
(1) は \ と同じ、(2)は小数点第一位を四捨五入
代入演算子のInteger型の処理はどういう仕組みになってるの?
0019デフォルトの名無しさん
2016/11/21(月) 13:55:11.76ID:9aLTR+2V「いちばん近い偶数」でぐぐってごらん?
0021デフォルトの名無しさん
2016/11/21(月) 14:23:02.65ID:kEzTcdtR巨大な配列が必要な時
LongよりIntegerのが要素数の上限が上
回数の少ないループカウンターはVariantで十分
0022デフォルトの名無しさん
2016/11/21(月) 14:24:05.80ID:kEzTcdtR0023デフォルトの名無しさん
2016/11/21(月) 16:13:00.17ID:JU50lAgFメモリの使用料は少ないけどパフォーマンス的にはlongのほうがいいとかよくわからんな
0024デフォルトの名無しさん
2016/11/21(月) 16:28:48.73ID:9aLTR+2VVariant要素の配列だって100万200万レベルならまるで問題ないけどね
0025デフォルトの名無しさん
2016/11/21(月) 16:39:13.03ID:CO+aVjyU0026デフォルトの名無しさん
2016/11/21(月) 17:21:15.21ID:kEzTcdtR0027デフォルトの名無しさん
2016/11/21(月) 17:21:57.72ID:kEzTcdtR多次元だとそうも言ってられなくなる
0028デフォルトの名無しさん
2016/11/21(月) 17:51:52.02ID:5ZF6P8ki0029デフォルトの名無しさん
2016/11/21(月) 17:55:25.07ID:9aLTR+2Vそんなにか?
0030デフォルトの名無しさん
2016/11/21(月) 18:05:44.53ID:nTw6YMMUてか、速度気にするなら別言語で実装した方が良くね?
俺はFFT変換が必要になったとき、C++で実装した
0031デフォルトの名無しさん
2016/11/21(月) 19:29:07.13ID:VFvE/ERl0032デフォルトの名無しさん
2016/11/21(月) 19:36:24.68ID:9aLTR+2VそれをVBAから呼び出したの?
0033デフォルトの名無しさん
2016/11/21(月) 20:57:47.05ID:K2PBWFHo0034デフォルトの名無しさん
2016/11/21(月) 21:10:04.11ID:VFvE/ERl0035デフォルトの名無しさん
2016/11/21(月) 21:10:51.45ID:9aLTR+2V0036デフォルトの名無しさん
2016/11/21(月) 23:50:54.75ID:jsNT0OAI「中に入る文字はランダム(桁不定)末尾の数字だけは11か22」ランダムな文字列(桁不定):必ず数字(4ケタ)[ランダム文字列(A),ランダム文字列(B)]
コレを、11 or 22、 ランダムな文字列、必ず数字(12ケタ)、ランダム文字列A、ランダム文字列B
と分けて格納する方法があったら教えてくだささい。
()は、単に補足説明のためのかっこですが、「」、:、[]は実際の文字列に使われています。
例:
「びっくりためごろう22」ちょちくちょ金魚:0123[伊藤,よう!加藤]
こんな感じです。
バージョンは2007か、2010で、VBAも作れませんけど、環境的には使えます。
以上、よろしくお願いします。
0037デフォルトの名無しさん
2016/11/22(火) 00:00:33.16ID:YV24xnABそこに11とか22が入ると俄然難しくなるような。
0038デフォルトの名無しさん
2016/11/22(火) 00:04:02.35ID:YV24xnAB例で分け終わったところも書いて欲しいところ。
0039デフォルトの名無しさん
2016/11/22(火) 00:15:19.60ID:YV24xnAB12桁とあるのは4桁ですよね?
0040デフォルトの名無しさん
2016/11/22(火) 00:18:25.83ID:RN+cALzNPrivate Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Intersect(Target, Worksheets(1).Range("C3:AD253")) Is Nothing Then Exit Sub
With Target
Select Case .Value
Case ""
.Value = "●"
Case "●"
.Value = ""
End Select
End With
End Sub
●を空白にし空白を●にするこの処理ですが、複数にまたがるセルを範囲指定した場合でも一度のダブルクリックで同じ処理を一気に行うためには上記のコードをどのように書き換えればいいでしょうか?
0041デフォルトの名無しさん
2016/11/22(火) 00:25:34.16ID:Kv884UEoを
\2、\3、\4、\5、\6
としたいのはわかったけどランダム文字列の中に同等の文字列が入っていた場合はどうなるの?
0042デフォルトの名無しさん
2016/11/22(火) 00:26:19.76ID:tJZj2rG+For Each c in Target
With c
0043デフォルトの名無しさん
2016/11/22(火) 00:29:18.63ID:Kv884UEotargetを繰り返せばいい
ただダブルクリックの時点でセルの選択はひとつになりそうだけど
0044デフォルトの名無しさん
2016/11/22(火) 00:35:48.03ID:YV24xnAB文字列がカッコ類で必ず括られてて、ランダム文字列に数字や記号が現れないなら、VBAも正規表現も使わず、ワークシート関数でいけそうな感じ。
0045デフォルトの名無しさん
2016/11/22(火) 00:36:43.83ID:SNCtuyoO0046デフォルトの名無しさん
2016/11/22(火) 03:21:24.15ID:RN+cALzNありがとうございます。このcはCASEを指しているのでしょうか
0047デフォルトの名無しさん
2016/11/22(火) 03:29:30.20ID:Kv884UEoforの意味とwithの意味を調べるといいですよ
と言うかwithは使ってますやん
004836
2016/11/22(火) 06:13:11.62ID:N13N3bI0ランダム文字列と書いたところには、数字は入りません。
>>38
例:
「びっくりためごろう22」ちょちくちょ金魚:0123[伊藤,加藤]
※半角カンマが非常に見づらいので、全角化していますが、実際は半角です
欲しい結果:
びっくりためごろう22 ちょちくちょ金魚 0123 伊藤 加藤
>>39
すみません4ケタです。
>>41
文字列は常に異なります。
伊藤22 加藤 0123 伊藤 加藤
みたいになることはありません。
0049デフォルトの名無しさん
2016/11/22(火) 06:16:26.93ID:YV24xnABそしたら、ワークシート関数でできますよ。
mid関数、search関数、あとなくてもいいけどlen関数で。
0050デフォルトの名無しさん
2016/11/22(火) 07:09:21.57ID:emRZnEMS0051デフォルトの名無しさん
2016/11/22(火) 07:34:06.97ID:Kv884UEo「」、:、[]を文字として利用しているのであれば
「「び11」っくり:8854[ため,ごろ]う22」ちょちくちょ「金魚22」:0123[伊[藤,加]:6666[近,藤]]
みたいなこともあり得るってこと?
0052デフォルトの名無しさん
2016/11/22(火) 08:08:22.88ID:Kv884UEo数字は入らないって書いてましたね
0053デフォルトの名無しさん
2016/11/22(火) 08:11:00.86ID:emRZnEMSそんな簡単なわけないな
0054デフォルトの名無しさん
2016/11/22(火) 08:14:18.96ID:emRZnEMS書式がランダムならまた別だが
0055デフォルトの名無しさん
2016/11/22(火) 08:34:07.05ID:Kv884UEo”(11|22)」”の3文字後から”:\d{4}\[ ”の前まで
”:\d{4}\[ ”の2文字目から5文字目まで
”:\d{4}\[ ”の6文字後から最後の1文字前までを,で分割
vba使えないエクセルってところは気になるけどこんな感じでいけると思う
0056デフォルトの名無しさん
2016/11/22(火) 13:01:29.12ID:vhMcFInXこのスレ的に 正規表現使って VBAで組んでみた
「」: は 全角としてるから もし半角なら正規表現パターンを半角に適宜直すかレスしてね
使い方は
A1へ 「びっくりためごろう22」ちょちくちょ金魚:0123[伊藤,加藤]
だと
=Split36(A1,1) ・・・びっくりためごろう22
=Split36(A1,2) ・・・ちょちくちょ金魚
=Split36(A1,3) ・・・0123
=Split36(A1,4) ・・・伊藤
=Split36(A1,5) ・・・加藤
※ #N./A になったら 定義したパターンと一致しなかったって事
改行が大杉って言われたので VBAコードは次のレスで
005756
2016/11/22(火) 13:02:09.76ID:vhMcFInXFunction Split36(Text As String, SubMatcheNum As Long)
Dim RegEx As Object
Dim Ans As Variant
Dim Result1 As Variant
Dim Result2 As Variant
Set RegEx = CreateObject("VBScript.RegExp")
'正規表現パターン
RegEx.pattern = "「(.*[^\d](?:11|22))」(.*):(\d{4})\[(.*),(.*)\]"
RegEx.Global = True
Set Result1 = RegEx.Execute(Text)
If Result1.Count = 0 Then
Ans = CVErr(xlErrNA) 'パターン不一致
Else
Set Result2 = Result1(0).SubMatches
If Result2.Count < SubMatcheNum Then
Ans = ""
Else
Ans = Result2(SubMatcheNum - 1)
End If
End If
Split36 = Ans
End Function
0058デフォルトの名無しさん
2016/11/22(火) 21:21:02.20ID:urY3dZpz質問者は説明用の存在しない「」とか入れんなよ、分かりにくいから
0059デフォルトの名無しさん
2016/11/22(火) 21:26:15.63ID:vhMcFInXん??
>>36
>>()は、単に補足説明のためのかっこですが、「」、:、[]は実際の文字列に使われています。
と書いてある訳だか・・・
0060デフォルトの名無しさん
2016/11/22(火) 22:21:39.73ID:29TEhOYb=LEFT(A1,FIND({"1","2"},A1)+1)
びっくりためごろう22
=MID(A1,FIND({"1","2"},A1)+2,FIND({"0","1"…"9"},A1,FIND({"1","2"},A1)+2)-FIND({"1","2"},A1)+1))
ちょちくちょ金魚
あとは同じ要領でfindネストして、その前のfindの結果を引き算して文字数を判定する
最後の区切りは,だからRight使えば楽
VBAならfindの結果を変数に入れればネストしないですむ
0061デフォルトの名無しさん
2016/11/22(火) 22:54:23.71ID:VrepQFzl環境的にはVBA使えるって言ってるんだし
0062デフォルトの名無しさん
2016/11/22(火) 23:17:25.79ID:29TEhOYbVBAならもっとシンプルでいいじゃん
上のワークシート関数そのままでもいいし、
For i = 1 to Len(strHoge)
If IsNumeric(Mid(strHoge, i, 4)) Then
End if
Next
とかでもいい
0063デフォルトの名無しさん
2016/11/22(火) 23:47:20.45ID:VrepQFzlパターン記述するだけがなんでそんなに面倒なの?
0064デフォルトの名無しさん
2016/11/23(水) 00:57:21.92ID:19Uj+Xkp0065デフォルトの名無しさん
2016/11/23(水) 04:26:23.53ID:CokKvqKVttp://www.dotup.org/uploda/www.dotup.org1070413.zip.html
サンプルの表を上記にアップロードしました。
簡単に記載しますと、列名として
0066デフォルトの名無しさん
2016/11/23(水) 04:26:58.39ID:CokKvqKVttp://www.dotup.org/uploda/www.dotup.org1070413.zip.html
サンプルの表を上記にアップロードしました。
簡単に記載しますと、列名として
006765-66
2016/11/23(水) 04:29:55.29ID:CokKvqKVデータフィルタを適用済みの表に対して行っている手動操作を自動化したいです。
ttp://www.dotup.org/uploda/www.dotup.org1070413.zip.html
サンプルの表を上記にアップロードしました。
簡単に記載しますと、列名として id, disp_name, key_name, str_tag の4列があります。
id列には事前に番号が振ってあります。
disp_name列には、2行目から下に向かって順番に文字列を埋めていきます。
key_name列には、disp_name列に入力した列まで文字列を埋めます。
str_tag列は、=concentnace(\"<item>\", key_name列の同じ行, \"</item>\") として文字列を結合しています。
この表に対して、現状では手動で下記操作をしています。
(1) disp_name列で「昇順でソート」
(2) disp_name列が何行まで追加されているか目視で確認(今回は2〜5行)
(3) str_tag列の2行目をマウス左クリック
(4) str_tag列の5行目を[SHIFT]+マウス左クリック
(5) [Ctrl + C]でクリップボードにコピー
この操作をVBAで自動化したいのです。ご教示お願いいたします。
0068デフォルトの名無しさん
2016/11/23(水) 04:38:18.15ID:ETQkNxLx上記のように特定の文字列や数字が入ったセルを削除したいのですが、書式がユーザー定義に勝手になってしまった後の特定の数字も認識させるのにはどうすればいいでしょう。
例えば表示上は「2:00」でセル内は「2:00:00」になっているセルがあるのですが、「Cells(i,4)=」のイコール以降の右辺にはどのような入力をすればいいのか教えていただきたいです。
ユーザー定義は「h:mm」になっていました。
0069デフォルトの名無しさん
2016/11/23(水) 05:10:34.47ID:JuV+PXekシリアル値か、timevalue関数使ってはどう?
右辺を分数の2/24にするか、timevalue(2:00)にするか。
007069
2016/11/23(水) 05:57:17.36ID:JuV+PXekこんな感じ?
Dim lastRow As Integer
'B列を基準に昇順ソート
Cells(1, 1).CurrentRegion.Sort _
Key1:=Range(""B1""), Order1:=xlAscending, Header:=xlYes
'変数lastRowは、B列を基準にデータの最終行
lastRow = Cells(1, 2).End(xlDown).Row
'D列の指定範囲をコピー
Range(Cells(2, 4), Cells(lastRow, 4)).Copy
End Sub
0071デフォルトの名無しさん
2016/11/23(水) 07:36:30.90ID:ZUX7K1p9cells.valueじゃなくてcells.textを見るとかは?
0072デフォルトの名無しさん
2016/11/23(水) 09:47:08.46ID:pu5XhQKG操作を自動化するのであればまずマクロの記録をやればよい
その時にできたメソッドに内に存在するselectionをrangeに変更
パラメータに最終行(long)を付ける
後は好きな起因に対して起因メソッドを作って最終行を設定するだけ
0073デフォルトの名無しさん
2016/11/23(水) 10:19:18.70ID:uwyLjcXTApplication.OnKey
いれてエンタキー押すとセルが移動するプロシージャに飛ぶように設定しています
しかしそれが入っているマクロを閉じて
マクロと一緒に起動していたエクセルファイルのエンタキーを押すと
なぜか閉じたはずのマクロが起動してしまいます
対処方法はあるのでしょうか?
0074デフォルトの名無しさん
2016/11/23(水) 10:24:22.35ID:gsunTgbT0075デフォルトの名無しさん
2016/11/23(水) 10:25:09.61ID:uwyLjcXTプロシージャじやなくてモジュールでしたね
0076デフォルトの名無しさん
2016/11/23(水) 10:39:54.76ID:gsunTgbT文章中に「セルが移動する」と「プロシージャに飛ぶ」が並んでいるので意味がとりづらかったがそういうことか。
マクロを「閉じる」って具体的に何をしたの?
Application.OnKey "~" を実行すればいいんじゃないの?
0077デフォルトの名無しさん
2016/11/23(水) 11:11:45.75ID:XfUDafmh0078デフォルトの名無しさん
2016/11/23(水) 11:28:29.03ID:zPkUxQ3G用語の意味を再確認しような
正しく伝わらないから
0079デフォルトの名無しさん
2016/11/23(水) 16:14:50.37ID:IwbC5ev61セルに複数行入力される事があり、A4をはみ出して
しまいます。印刷プレビューすれば、はみ出した行数
が視覚的に分かるのですが、VBAで行削除を処理する場合、
はみ出した行数を把握するには方法を教えてください。
0080デフォルトの名無しさん
2016/11/23(水) 17:14:03.20ID:E/tz3TdR0081デフォルトの名無しさん
2016/11/23(水) 23:40:45.02ID:lMvXMjpYたまに改へ゜ージ位置を誤爆るから注
意
0082デフォルトの名無しさん
2016/11/24(木) 00:59:22.70ID:0nX6Nk4oこれって本当に作ってるの?
ニコニコの方見たら動画貼り付けただけって言われてるけど
0083デフォルトの名無しさん
2016/11/24(木) 01:49:49.48ID:SBaN99OSそれと同じ物かどうかはわからないけど「エクセルマリオ」ってゲームはフリーで公開されてる
0084デフォルトの名無しさん
2016/11/24(木) 12:21:26.50ID:cvaqDL6Sただ言葉が足りていないだけ
0085デフォルトの名無しさん
2016/11/24(木) 13:17:40.04ID:O2SMVygHなにか良いやり方ありませんか?
列が飛び飛びで大量なので困り果てています
0086デフォルトの名無しさん
2016/11/24(木) 13:30:05.59ID:GyKn3yyw入力ではなくて?
0087デフォルトの名無しさん
2016/11/24(木) 13:40:19.87ID:O2SMVygHそうです。大量の入力が終わってから検算してみて数字が合わないことが判明したって経緯がありまして…
間違ってるのがどのセルか特定する必要があるんです
0088デフォルトの名無しさん
2016/11/24(木) 13:46:19.12ID:UceWwKrw.Cells(1, 1) - .Cells(1, 2) = .Cells(1, 3)
を確認すればいいだけなんじゃないの?
0089デフォルトの名無しさん
2016/11/24(木) 14:38:39.71ID:m1lTwxZn=IF(MOD(COLUMN(),4)=1,IF(C1-D1=E1,"OK","間違ってるよ!"),"")
を入力してCNA2までコピペ
間違ってる場所に飛びたければCtrl+F検索対象を値にして"間違ってるよ!"で検索
009086
2016/11/24(木) 14:50:42.07ID:GyKn3yywDim i As Long
For i = 0 To 597
If Not Cells(1, 5).Offset(0, 4 * i) = _
Cells(1, 4).Offset(0, 4 * i) - Cells(1, 3).Offset(0, 4 * i) Then
MsgBox Cells(1, 5).Offset(0, 4 * i).Address(False, False)
End If
Next i
End Sub
これだと間違ってるのが多いとMsgがうっとうしいか。
あと全部あってますよって、OKだすのはどうやればいいですかね。
0091デフォルトの名無しさん
2016/11/24(木) 15:31:55.20ID:cvaqDL6Sok出すだけならこんなかんじでいいんじゃない?
Sub TEST()
Dim i As Long
dim s as string
s=””
For i = 0 To 597
If Not Cells(1, 5).Offset(0, 4 * i) = _
Cells(1, 4).Offset(0, 4 * i) - Cells(1, 3).Offset(0, 4 * i) Then
s = s & Cells(1, 5).Offset(0, 4 * i).Address(False, False) & vbcrlf
End If
Next i
if(len(s)=0)then s= ”ok”
MsgBox s
End Sub
0092デフォルトの名無しさん
2016/11/24(木) 16:18:12.50ID:GyKn3yyw勉強になります。
0093デフォルトの名無しさん
2016/11/24(木) 19:44:35.62ID:RwTe1nkAVBA一通りマスターして、次に覚える汎用言語は何が楽ですか?
http://d.hatena.ne.jp/nomuyoguruto/20091103/1257240624
こういうサイト見ながらいろいろ考えてるのですが
VBAからの応用という視点ではどうでしょう
0094デフォルトの名無しさん
2016/11/24(木) 19:59:25.66ID:yz+SO+77Python
0095デフォルトの名無しさん
2016/11/24(木) 20:26:55.37ID:ajQp3ycE変数宣言ないのが違和感あるけど。
0096デフォルトの名無しさん
2016/11/24(木) 20:30:04.54ID:D6M+UwPxSub Check(r As Range)
For i = r(1).Column To r.Columns.Count Step 3
If eq(r(i)) = False Then Exit For
Next
If i < r.Columns.Count Then MsgBox "NG" Else MsgBox "OK"
End Sub
Function eq(r As Range) As Boolean
eq = r - r.Offset(0, 1) = r.Offset(0, 2)
End Function
>>93
アセンブラ
0097デフォルトの名無しさん
2016/11/24(木) 20:47:53.02ID:SLtEYwkqてか、目的はないのかよ
0098デフォルトの名無しさん
2016/11/24(木) 21:47:19.24ID:D6M+UwPx今更気がついたが for i = 1 to r.Count Step 3 だった。
0099デフォルトの名無しさん
2016/11/24(木) 22:07:19.81ID:cvaqDL6SVBAと似たようにやりたいならVB.NETだと思う
ただ手段が目的とならぬよう気を付けてね
0100デフォルトの名無しさん
2016/11/25(金) 00:05:30.65ID:2artgSQCちゃんと作ってるんじゃないの?
SFC版だと、背景が二重スクロールするけど、
それは1枚になってる。
だからエミュでもない。
0101デフォルトの名無しさん
2016/11/25(金) 08:44:43.44ID:qZJM+iCLたとえば 10個のWorksheetがあるとして
Sub DelColum()
Dim WName(30) AS string
Dim Temp AS string
Dim i AS Integer
WName(1) = "Sheet1"
……
WName(10) = "Sheet10"
for i = 1 to 10
Temp = WName(i)
Worksheets(Temp).Activate
Columns("A:B").Select
Selection.Delete Shift:=xlToLeft
Next
End Sub
これだとワークシートの数が多いと大変です。
0102デフォルトの名無しさん
2016/11/25(金) 09:28:00.14ID:BPaHC9at0103デフォルトの名無しさん
2016/11/25(金) 09:29:17.83ID:IaV1tOiX楽という観点のみで見れば一番楽なのはVB6.0でしょう。
ただしもう終わった言語なので役には立ちませんが。
0104デフォルトの名無しさん
2016/11/25(金) 09:50:28.85ID:yAkpad1YSub Macro1()
Worksheets.Select ' 全シートを一気に処理
Columns("A:B").Select
Selection.Delete
End Sub
0106デフォルトの名無しさん
2016/11/25(金) 11:06:01.87ID:tx9BsTC1Application.OnKey{RETURN}を仕込んでいるのですが
ほかのブック(マクロを仕込んですらいない)でエンターを押してもセルの移動がしません
なぜなのでしょうか?
0107デフォルトの名無しさん
2016/11/25(金) 11:51:47.12ID:GSY3PyBI0108デフォルトの名無しさん
2016/11/25(金) 13:16:42.29ID:tx9BsTC1自己解決しました
0109デフォルトの名無しさん
2016/11/25(金) 13:17:45.86ID:tx9BsTC1戻らないんやな
0110デフォルトの名無しさん
2016/11/25(金) 16:12:51.59ID:zPCc1mPBシート跨いでunionって出来ないんだっけ
0111デフォルトの名無しさん
2016/11/25(金) 22:42:48.73ID:eBc0RsxAこれ参考にして
https://youtu.be/EgbsOuegXf8
0112デフォルトの名無しさん
2016/11/26(土) 17:07:14.29ID:ThddGL67個別表のコピーシートを作成するとともに、集計表1行目の
複数セル(連続ではなく飛び飛びです)の値を入力。
さらに個別表のコピーシートを作成し、2行目の値を入力。
次は3行目を・・・といった動作を繰り返すようなマクロを
作成したいのですがどのような感じで作成すればいいのでしょうか。
0113デフォルトの名無しさん
2016/11/26(土) 17:16:48.84ID:hhkRb/f2マクロの記録
0114デフォルトの名無しさん
2016/11/26(土) 17:36:31.26ID:HuYXsbq30115デフォルトの名無しさん
2016/11/26(土) 18:22:17.96ID:5ywZoA9/要件としてはこんなイメージ?
下記処理を入力済の集計表の1行目から最終行まで繰り返す
1.白紙の個別表を複製(シート名はどうする?)
2.集計表のx行目の特定セルから複製した個別表の特定セルへコピー(特定セルの数だけ繰り返す)
0116デフォルトの名無しさん
2016/11/26(土) 20:35:39.19ID:QK8VOWUnVBA覚えるより日本語勉強しよう
0117デフォルトの名無しさん
2016/11/26(土) 21:12:51.16ID:ThddGL67まとめていただいてありがとうございます。
シート名に関しては通常のコピー時のように「○○○(1)」等で大丈夫です。
>>116
説明下手で申し訳ございません。
0118デフォルトの名無しさん
2016/11/26(土) 21:28:27.79ID:SwAHsfuW聞くのとかとは全然違うからねー。w
0119デフォルトの名無しさん
2016/11/26(土) 21:31:03.75ID:oln4NHYZ関数でやるかマクロの記録で充分速そう
0120デフォルトの名無しさん
2016/11/26(土) 22:32:44.88ID:SPjKnEgp自分では理解できていないのだが、上司や先輩が言う専門(用)語を使い続けたがる
それ、おま環 てことに気付けない 理解できていないから他所の人間へも伝えるための喩えが思い浮かばない
そのくせ、自力で苦心惨憺しようとはせずに、楽して他力本願(間違った意味の)に委ねる
そして一ヵ月後、三ヵ月後、半年後、一年後、三年後 おなじところで蹴躓いて他力本願・・・ 身に付かない → お払い箱
0121デフォルトの名無しさん
2016/11/26(土) 23:53:01.23ID:5ywZoA9/まずはマクロ記録でメソッドをつくる
マクロ記録でできたメソッドにパラメータを追加したりすこしメンテする
で下記のような感じで呼ぶ
sub main()
dim rng as range
set rng = 入力済の集計表.cells(1,1)
do until len(rng)=0
call マクロ記録でできたメソッド(rng)
set rng = rng(2,1)
loop
end sub
>>120
わからないことをわからないと認識してる分にはそれでいいと思う
受け取れるヤツやわかるヤツが進めればいいだけなので
0122デフォルトの名無しさん
2016/11/27(日) 01:47:47.25ID:9ALiodR+どうやるんだろうな。
WindowsAPI使っても、多少チラつくと思うんだけど。
0123デフォルトの名無しさん
2016/11/27(日) 01:52:28.30ID:abta4z3wDirectXまで手を出せばチラつかないようにできる
0124デフォルトの名無しさん
2016/11/27(日) 02:36:43.88ID:IwpiVUPK再現したければDirect Xで普通に作れよ。
なんでExcelなんだよ。
0125デフォルトの名無しさん
2016/11/27(日) 03:27:31.54ID:M0APP3Xamsgbox Activesheet.OptionButton1.Value
これを実行しても
「実行時エラー438 オブジェクトは、このプロパティまたはメソッドをサポートしていません」
となります。
どなたか助けて下さい。
0126デフォルトの名無しさん
2016/11/27(日) 03:57:49.62ID:1SrO/LjYシート上に配置するコントロールって フォームコントロール と ActiveXコントロールの二種類ある訳で
その取得方法は後者のActiveX コントロールだと思うぞ
前者なら
ActiveSheet.OptionButtons("オプション 1").Value
だよ
0127デフォルトの名無しさん
2016/11/27(日) 04:00:38.40ID:abta4z3wオプションボタンには2種類あるけど、どっちを使うか間違えてない?
http://i.imgur.com/0F2bFaf.gif
0128デフォルトの名無しさん
2016/11/27(日) 06:05:42.08ID:QCAWmJwyありがとうございます
0129デフォルトの名無しさん
2016/11/27(日) 08:28:41.06ID:9ALiodR+DirectXってフルスクリーン用じゃないの?
0130デフォルトの名無しさん
2016/11/27(日) 08:42:59.21ID:iYxQCmG1俺は思うんだが、このくらいはググれば出てくると思うの
シート オプションボタン 値 取得できない
とかでさ
質問スレだから答えるのは間違いじゃないけどね
検索もコツがあるから、自分で調べないと身に付かないよマジで
0131デフォルトの名無しさん
2016/11/27(日) 10:20:06.36ID:hHGtCJzyウィンドウでも画面の一部でも使える
0132デフォルトの名無しさん
2016/11/27(日) 11:46:48.22ID:CTVDKxYwありがとうございます!後者でした!解決しました!
>130
そりゃあ、そうですよ。第一ググッたほうがはやいですし。
3時間ほどグーグル先生に相談したけどわからなかったんでここに書きました。
0133デフォルトの名無しさん
2016/11/27(日) 11:47:25.28ID:CTVDKxYw間違ってました、ありがとうございます!
0134デフォルトの名無しさん
2016/11/27(日) 12:04:08.13ID:XCglAg8kIndex関数とoffset関数であっという間に終わりそうなんだが
0135デフォルトの名無しさん
2016/11/27(日) 12:16:29.51ID:LAFeCFqG0136デフォルトの名無しさん
2016/11/27(日) 15:49:41.11ID:fgiyvf94「君の検索時間の3時間は人生にとって無駄」
0137デフォルトの名無しさん
2016/11/27(日) 17:09:48.69ID:6DANTm/Lセレンディピティってのもある
0138デフォルトの名無しさん
2016/11/27(日) 17:10:14.41ID:6DANTm/Lなんで?
0139デフォルトの名無しさん
2016/11/27(日) 17:19:34.10ID:LAFeCFqGIFを何重かネストさせた中にVLOOKUPがあって...とかになりがちだからさ。
単純に見辛いというのもあるけど、ロジックがシートとVBAの両方に分散されると
スパゲティ化しやすいと思う。
0140デフォルトの名無しさん
2016/11/27(日) 17:24:01.54ID:6DANTm/L具体的にそれでどう困ったの?
関数の本体がどこにあっても良いんじゃね?
dll使うのとworksheet関数使うのと自作関数使うのと
誰かが作ったクラスのメソッド使うのと
ロジックの観点で違いあるかな?
ちゃんと関数の仕様が解ってる事が前提だけど
0141デフォルトの名無しさん
2016/11/27(日) 17:36:24.03ID:y/G0P3fYそうだよな、
区別する理由が不明だな
0142デフォルトの名無しさん
2016/11/27(日) 18:12:43.77ID:LAFeCFqGコメントの有無という点は?
0143デフォルトの名無しさん
2016/11/27(日) 18:16:41.37ID:LAFeCFqGずっと見通しが良くなると思う。
0144デフォルトの名無しさん
2016/11/27(日) 18:22:13.97ID:6DANTm/Lworksheet関数を使うのとコメントつけるのは別の事だと思う
worksheet関数の使用量を少なくする事で解決する問題ではない
ネストがどうこうと言うのも同様だと思う
0145デフォルトの名無しさん
2016/11/27(日) 18:30:32.71ID:LAFeCFqGワークシート関数の使用はほどほどにね、ていうのはセル内の = で始まる式の中にたくさんのワークシート関数を
含ませるのは避けるべきって意味。
ユーザー定義関数にはわかりやすい名前もつけられるし、コメントだって書ける。
だけどセル内に書かれた式には普通どこにもコメントがないじゃん。
0146デフォルトの名無しさん
2016/11/27(日) 18:35:41.32ID:SKb1B9xQ0147デフォルトの名無しさん
2016/11/27(日) 18:54:13.90ID:LAFeCFqG>>139に書いた通りIFとかVLOOKUPとかのことさ
0148デフォルトの名無しさん
2016/11/27(日) 18:58:07.64ID:6DANTm/Lvbaでもworksheetfunction.vlookupでワークシート関数を使える
紛らわしい
セル内でもalt+enterで改行できるんじゃない?
多少見やすくできると思う
0149デフォルトの名無しさん
2016/11/27(日) 19:01:22.11ID:YPeWXn80→1日の数量を大きい順に並べ替えてから大きい方から合計の半分以上になるまで足して分離値を求める
→分離値を元に大小を分ける…という作業をデータの入った最終行まで行うマクロを作りたいんだけどわからん
形としてはこんな感じのを今までほぼ手作業でやってた
www.dotup.org1074946.xlsx
0150デフォルトの名無しさん
2016/11/27(日) 19:07:07.83ID:YPeWXn80http://www.dotup.org/uploda/www.dotup.org1074946.xlsx.html
0151デフォルトの名無しさん
2016/11/27(日) 19:23:09.33ID:p8mIwYr3個人的にはコメントが書けないことと並んでローカル変数が使えないのが痛い
デバッグも大変だし
0152デフォルトの名無しさん
2016/11/27(日) 19:25:53.13ID:SKb1B9xQネストしたifとかvlookup
if true then
if true then
s=WorksheetFunction.VLookup(x, Range , y, False)
end if
end if
0153デフォルトの名無しさん
2016/11/27(日) 19:26:20.43ID:6DANTm/Lvbaを知らない人は判らないだろうし
セキュリティ設定の仕方を知らない人も居る
ローカル変数の代わりにセルを使えば良いよ
0154デフォルトの名無しさん
2016/11/27(日) 19:33:45.48ID:6DANTm/L大きな値から並べ替えて
全部の和を求めて1/2する
大きな値から順に出して半分の値を超えたら
そこから上と下で分ければいい
0155デフォルトの名無しさん
2016/11/27(日) 19:35:30.35ID:RiVfj5+Kそれをセルに直接
=IF(IF(.... VLOOKUP(..., ..., ...)))
とか書いてあったらヤダ、って意味でそ
0156デフォルトの名無しさん
2016/11/27(日) 19:40:33.60ID:SKb1B9xQそれはわかるよ
俺はvbaスレにてそれを示すには言葉が足りてないと思うよって言いたいだけだよ
もっと言えば俺ならそこまで複雑という程ネストしなきゃならないのなら設計から見直す
0157デフォルトの名無しさん
2016/11/27(日) 19:47:35.61ID:9ALiodR+一度アドバンスフィルタで、必要箇所を切り取ってから使ったほうが速いのな。
0158デフォルトの名無しさん
2016/11/27(日) 19:49:54.26ID:LAFeCFqGそういう意味ですね。
そういう式はどれもこれも同じに見える。
セルC1にある式とセルD1にある式が実質的に同じなのか違うのかよーく見比べないとわからない。
0159デフォルトの名無しさん
2016/11/27(日) 19:57:15.73ID:p8mIwYr3> vbaを知らない人は判らないだろうし
> セキュリティ設定の仕方を知らない人も居る
だからなに?
使えないケースがあるのは知ってるけど、だからと言って複雑な数式の欠点がなくなる訳じゃないでしょ
> ローカル変数の代わりにセルを使えば良いよ
個人的にはバッドノウハウだと思う
0160デフォルトの名無しさん
2016/11/27(日) 20:23:53.69ID:6DANTm/Lvbaを知らない人はユーザ定義関数を作れない
つまり他の解決策がない
この状況でネストを深くするのか
途中経過をセルに記録するのか
くらいの選択肢しかない
ユーザ定義関数は使えない、worksheet関数は使うな、セルに記録するな
ではどうやって解決する?
0161デフォルトの名無しさん
2016/11/27(日) 21:09:35.79ID:p8mIwYr3使えない時の話なんてしてないんだが...
そもそも
> vbaを知らない人は
スレタイ100回読んでから出直してこいよ
0162デフォルトの名無しさん
2016/11/27(日) 21:16:43.23ID:6DANTm/Lなんでそこだけセル内に限ってるのか?
vba内でworksheet関数を使い過ぎるなと言うのはなんで?と言うのがそもそもの質問だ
0163デフォルトの名無しさん
2016/11/27(日) 22:06:28.94ID:p8mIwYr3> vba内でworksheet関数を使い過ぎるなと言うのはなんで?と言うのがそもそもの質問だ
>>147 でそうじゃないって書いてあるだろ?
話の流れも読めてなかったのかよ
0164デフォルトの名無しさん
2016/11/27(日) 22:10:54.64ID:SKb1B9xQ>>147の記載も言葉が足りてないよ
ifもvlookupもvbaにあるんだから
0165デフォルトの名無しさん
2016/11/27(日) 22:38:43.48ID:p8mIwYr3>>155 で納得したんじゃないのかよ...
本人も >>158 でそう言う意味だって言ってるし
0166デフォルトの名無しさん
2016/11/27(日) 22:42:50.90ID:I9PMfVtSそれが無理とか、できるとしても難易度が高い場合にVBAを使う。
難易度が高い場合に、あえてワークシート関数でやってみることもある。
その場合はできるだけ作業列を使う。
0167デフォルトの名無しさん
2016/11/27(日) 22:47:38.58ID:SKb1B9xQ俺個人的のことで言えば>>145の時点で理解はしてる
だからこそ>>146で勘違いしてしまいますよーと書いた
一貫して伝えたいのは同じ言葉で複数の意味があるんだから明確に指定した方が言いと思うってこと
言葉が足りてないと勘違いから議論が錯綜する
0168デフォルトの名無しさん
2016/11/27(日) 22:48:56.34ID:YHyo0NPs激しくどうい
0169デフォルトの名無しさん
2016/11/27(日) 23:02:27.57ID:p8mIwYr3何回も書かなくていいよ
お前がどう思ってようとどうでもいいし
0170デフォルトの名無しさん
2016/11/27(日) 23:12:10.76ID:paA22RBUププッ
0171デフォルトの名無しさん
2016/11/27(日) 23:32:02.77ID:SKb1B9xQごめんね
聞かれてるような気がしてしまったので答えてた
その上で言いたいことはひとつだけだったので繰り返す形になってしまったよ
あと他人がどう思っていてもどうでもいいなら絡まない方がいいよ
0172デフォルトの名無しさん
2016/11/28(月) 06:46:24.06ID:HGeAKo4h0173デフォルトの名無しさん
2016/11/28(月) 07:37:45.92ID:Fq0t3y7O0174デフォルトの名無しさん
2016/11/28(月) 10:33:38.20ID:75y4ehkPその赤色セルを黄緑色に塗りつぶす、というマクロを書きたいのですが
Sub cellcolor()
Dim seru As Range
For Each seru In Selection
If seru.Interior.ColorIndex = 6 And seru.Offset(, 1).Interior.ColorIndex = 3 Or seru.Offset(, -1).Interior.ColorIndex = 3 Then
seru.Offset(, 1).Interior.ColorIndex = 43 Or seru.Offset(, -1).Interior.ColorIndex = 43
End If
Next seru
End Sub
だとどうも上手くいきません。黄色セルの左右両隣のなかから赤色塗りつぶしがされてるセルのことを処理のなかでどうやって書けばいいでしょうか。
0175デフォルトの名無しさん
2016/11/28(月) 10:48:49.42ID:2XDtQ6UY右と左は別々に処理してください
一度にやるのは難しく、現実的ではありません
2回に分けて判定と塗りつぶしをしますから If は2組に分かれます
一番わかりやすく、その分効率の悪い一例を示しますが、ほかにも分け方は色々とあります
Sub cellcolor()
Dim seru As Range
For Each seru In Selection
If seru.Interior.ColorIndex = 6 And seru.Offset(, 1).Interior.ColorIndex = 3 Then
seru.Offset(, 1).Interior.ColorIndex = 43
End If
If seru.Interior.ColorIndex = 6 And seru.Offset(, -1).Interior.ColorIndex = 3 Then
seru.Offset(, -1).Interior.ColorIndex = 43
End If
Next seru
End Sub
0176デフォルトの名無しさん
2016/11/28(月) 11:18:24.07ID:75y4ehkPできました!!ありがとうございます、大変助かります。
0177デフォルトの名無しさん
2016/11/28(月) 19:54:50.21ID:IFLz/K9ovlookupとかのワークシート関数じゃなくてユーザ定義関数でもifのネストの中にあれば判りにくいけどな
ワークシート関数とかユーザ定義関数とかじゃなくて単にifとかのネストの問題
0178デフォルトの名無しさん
2016/11/28(月) 20:16:29.27ID:9hz+5ATo0179デフォルトの名無しさん
2016/11/28(月) 20:57:02.51ID:NHCcCoI/Sub CellColor()
Dim Cell As Range
For Each Cell In Selection
Dec Cell
Next
End Sub
Sub Dec(Cell As Range)
If Cell.Interior.ColorIndex <> 6 Then Exit Sub
For Each x In Array(1, -1)
With Cell.Offset(0, x).Interior
If .ColorIndex = 3 Then .ColorIndex = 43
End With
Next
End Sub
ネスト化を避ける例を書こうとしたら、逆にネストが深まってしまった。不思議だ・・・。
0180デフォルトの名無しさん
2016/11/28(月) 21:36:40.65ID:gVFOtB+wどっちもダメだと思うけどな。
色はあとから変えないと。
0181デフォルトの名無しさん
2016/11/28(月) 21:51:56.21ID:NHCcCoI/VBAスレなんだからコードで書いてくれよ。
0182デフォルトの名無しさん
2016/11/28(月) 22:19:32.48ID:gVFOtB+w(ただしワークシートの左右端のことは考慮していない)
Sub CellColor(ByVal rg As Range)
Dim i As Long, j As Long
With rg
ReDim col(1 To .rows.count, 0 To .Columns.count + 1) As Long
For i = 1 To UBound(col, 1)
For j = 1 To UBound(col, 2) - 1
If .cells(i, j).Interior.ColorIndex = 6 And .cells(i, j - 1).Interior.ColorIndex = 3 Then
col(i, j - 1) = 43
End If
If .cells(i, j).Interior.ColorIndex = 6 And .cells(i, j + 1).Interior.ColorIndex = 3 Then
col(i, j + 1) = 43
End If
Next j
Next i
For i = 1 To UBound(col, 1)
For j = 0 To UBound(col, 2)
If col(i, j) = 43 Then
.cells(i, j).Interior.ColorIndex = 43
End If
Next j
Next i
End With
End Sub
0183デフォルトの名無しさん
2016/11/28(月) 22:23:38.51ID:gVFOtB+w今のなしね。
0184デフォルトの名無しさん
2016/11/28(月) 22:27:16.46ID:NHCcCoI/Sub CellColor()
Dim Cell As Range, Uni As Range
For Each Cell In Selection
Dec Cell, Uni
Next
Uni.Interior.ColorIndex = 43
End Sub
Sub Dec(Cell As Range, Ret As Range)
If Cell.Interior.ColorIndex <> 6 Then Exit Sub
For Each x In Array(1, -1)
With Cell.Offset(0, x).Interior
If .ColorIndex = 3 Then
If Ret Is Nothing Then
Set Ret = Cell.Offset(0, x)
Else
Set Ret = Union(Ret, Cell.Offset(0, x))
End If
End If
End With
Next
End Sub
0185デフォルトの名無しさん
2016/11/28(月) 22:31:28.02ID:gVFOtB+wと読み間違えていた。だから先に塗っちゃダメだと考えた。ごめん。
しかしA列の処理はかったるいな。
0186デフォルトの名無しさん
2016/11/28(月) 22:56:09.44ID:NHCcCoI/Sub CellColor()
Dim Cell As Range, Uni As Range
For Each Cell In Selection
If Cell.Column < 1 And Cell.Column > Columns.Count Then
Dec Cell, Uni
End If
Next
Uni.Interior.ColorIndex = 43
End Sub
こうすりゃいいんじゃね。
0187デフォルトの名無しさん
2016/11/28(月) 23:00:24.55ID:NHCcCoI/Cell.Column > 1 And Cell.Column < Columns.Count
だな。
0188デフォルトの名無しさん
2016/11/28(月) 23:25:03.69ID:JmUquKRkSub CellColor()
Dim Cell As Range
For Each Cell In Selection
If Cell.ColorIndex = 3 then Dec Cell
Next
End Sub
Sub Dec(Cell As Range)
Dim flg1 as boolean
Dim flg2 as boolean
If 1 < Cell.column then flg1 = (Cell(1,0).ColorIndex = 6)
If Cell.Column < Columns.Count then flg2 = (Cell(1,2).ColorIndex = 6)
If flg1 or flg2 Then Cell.ColorIndex = 43
End Sub
0189デフォルトの名無しさん
2016/11/29(火) 10:57:07.09ID:29Iv9raXといった格好になっています。もしかして、相当遠回りでアホな書き方してしまっているでしょうか?
Sub 仕分け()
Dim i, n As Long
For i = Cells(Rows.Count, 5).End(xlUp).Row To 75 Step -1
If Cells(i, 5).Interior.ColorIndex = 6 Then
Cells(i, 5).Copy
n = Cells(Rows.Count, "I").End(xlUp).Row + 1
Cells(n, "I").PasteSpecial
Application.CutCopyMode = False
ElseIf Cells(i, 5).Interior.ColorIndex = 3 Then
Cells(i, 5).Copy
n = Cells(Rows.Count, "J").End(xlUp).Row + 1
Cells(n, "J").PasteSpecial
Application.CutCopyMode = False
ElseIf Cells(i, 5).Interior.ColorIndex = 44 Then
Cells(i, 5).Copy
n = Cells(Rows.Count, "M").End(xlUp).Row + 1
Cells(n, "M").PasteSpecial
Application.CutCopyMode = False
ElseIf Cells(i, 5).Interior.ColorIndex = 43 Then
Cells(i, 5).Copy
n = Cells(Rows.Count, "N").End(xlUp).Row + 1
Cells(n, "N").PasteSpecial
Application.CutCopyMode = False
End If
Next
改善策あったらぜひ教えてください
0190デフォルトの名無しさん
2016/11/29(火) 11:12:40.38ID:pYNDhOke0191デフォルトの名無しさん
2016/11/29(火) 11:19:29.33ID:Gr2aL60y"一つずつ処理されていく様子を眺める"
のがイヤなら 処理前に
Application.ScreenUpdating = False
して処理後に
Application.ScreenUpdating = True
するとか・・・
処理時間も 多少改善されるし
0192デフォルトの名無しさん
2016/11/29(火) 12:45:25.70ID:pYNDhOke動作確認もしていない
Sub 仕分け()
Application.ScreenUpdating = False
dim rng as range
set rng = cells(getLastRow(5) , 5)
do until rng.row < 75
dim n as long
n = getCol(rng)
if n = 0 then goto continue
rng.copy cells(getLastRow(n) + 1, n)
continue:
set rng = rng(0,1)
loop
Application.ScreenUpdating = True
end sub
0193デフォルトの名無しさん
2016/11/29(火) 12:45:38.94ID:pYNDhOkefunction getLastRow(c as long)as long
getLastRow = Cells(Rows.Count, c).End(xlUp).Row
end function
function getCol(rng as range)as long
If rng.Interior.ColorIndex = 6 Then
getCol = 9
ElseIf rng.Interior.ColorIndex = 3 Then
getCol = 10
ElseIf rng.Interior.ColorIndex = 44 Then
getCol = 13
ElseIf rng.Interior.ColorIndex = 43 Then
getCol = 14
End If
end function
0194デフォルトの名無しさん
2016/11/29(火) 12:59:44.64ID:SxpggBZW0195デフォルトの名無しさん
2016/11/29(火) 13:11:27.54ID:7L8IQyuG色で並べ替えをマクロの記録でVBAコードにする
色範囲ごとにコピーする
0196デフォルトの名無しさん
2016/11/29(火) 13:12:02.41ID:4c1nW30WあるいはElseIfを並べずにCaseで分けるとか、それならColorIndexは1回しかアクセスしないし
一番効くのはScreenUpdatingだろうけど
0197デフォルトの名無しさん
2016/11/29(火) 13:50:41.13ID:4c1nW30Wちょっとだけ直してみた
そこそこ速くなってるはず
Sub 仕分け()
Application.ScreenUpdating = False
Application.EnableEvents = False
Application.Calculation = xlCalculationManual
Dim i As Long, n As Long
Application.CutCopyMode = False
For i = Cells(Rows.Count, 5).End(xlUp).Row To 75 Step -1
Cells(i, 5).Copy
Select Case Cells(i, 5).Interior.ColorIndex
case 6
n = Cells(Rows.Count, "I").End(xlUp).Row + 1
Cells(n, "I").PasteSpecial
case 3
n = Cells(Rows.Count, "J").End(xlUp).Row + 1
Cells(n, "J").PasteSpecial
case 44
n = Cells(Rows.Count, "M").End(xlUp).Row + 1
Cells(n, "M").PasteSpecial
case 43
n = Cells(Rows.Count, "N").End(xlUp).Row + 1
Cells(n, "N").PasteSpecial
End If
Next
Application.ScreenUpdating = True
Application.EnableEvents = True
Application.Calculation = xlCalculationAutomatic
End sub
0198デフォルトの名無しさん
2016/11/29(火) 14:10:39.83ID:29Iv9raXどれも試したんですけど異様に速くなりました、大助かりです。
0199デフォルトの名無しさん
2016/11/29(火) 14:25:54.69ID:4c1nW30WSub 仕分け()
Application.ScreenUpdating = False
Application.EnableEvents = False
Application.Calculation = xlCalculationManual
Dim r As Long, I As Long, J As Long, M As Long, N As Long
I = Cells(Rows.Count, "I").End(xlUp).Row + 1
J = Cells(Rows.Count, "J").End(xlUp).Row + 1
M = Cells(Rows.Count, "M").End(xlUp).Row + 1
N = Cells(Rows.Count, "N").End(xlUp).Row + 1
Application.CutCopyMode = False
For r = Cells(Rows.Count, 5).End(xlUp).Row To 75 Step -1
Cells(r, 5).Copy
Select Case Cells(r, 5).Interior.ColorIndex
case 6
Cells(I, "I").PasteSpecial : I = I + 1
case 3
Cells(J, "J").PasteSpecial : J = J + 1
case 44
Cells(M, "M").PasteSpecial : M = M + 1
case 43
Cells(N, "N").PasteSpecial : N = N + 1
End If
Next
Application.ScreenUpdating = True
Application.EnableEvents = True
Application.Calculation = xlCalculationAutomatic
End sub
0200デフォルトの名無しさん
2016/11/29(火) 15:26:54.18ID:Bu/YI1ZB値を移すだけだよね?
0201デフォルトの名無しさん
2016/11/29(火) 15:27:32.34ID:Bu/YI1ZB0202デフォルトの名無しさん
2016/11/29(火) 15:36:05.49ID:Ic876T3y0203デフォルトの名無しさん
2016/11/29(火) 19:29:44.06ID:SxpggBZW0204デフォルトの名無しさん
2016/11/29(火) 20:49:24.52ID:I2cETkzm既に書き込まれているヒストグラムの
配列数式が入っている領域を調べる方法ってないですか?
セル単体なら HasArray で判定出来ますが、
そうではなくて配列数式が入っているセルの範囲を取得したいのです。
0205デフォルトの名無しさん
2016/11/29(火) 20:56:45.18ID:7L8IQyuGformulaarrayてのがぐぐったら出てきたけど
0206デフォルトの名無しさん
2016/11/29(火) 21:04:11.30ID:sGpU+tuW実は罠じゃね?
重複する処理を省いていったら、
あっちに飛んだり、こっちに飛んだり。
すげぇ追いづれぇ。
0207デフォルトの名無しさん
2016/11/29(火) 21:05:36.04ID:7L8IQyuG同じ処理を複数に書くと修正するとき複数修正したり
修正漏れしたりする
0208204
2016/11/29(火) 21:11:25.94ID:I2cETkzmレスありがとうございます。
formulaarray は配列数式の取得(と設定)は出来ますが、
配列数式が入っているセルの範囲が分かるわけではないようです。
0209デフォルトの名無しさん
2016/11/29(火) 21:14:53.30ID:7L8IQyuG配列数式が入ってるセルから
範囲を広げつつチェックしていけば?
手元に今エクセルないから想像だけど
0210デフォルトの名無しさん
2016/11/29(火) 21:20:26.95ID:vJHdqcHB他の罠にかかってやんのw
0211デフォルトの名無しさん
2016/11/29(火) 22:11:48.69ID:Ic876T3y自分だったらこうするな
�@あらかじめ作業用のシートを一つ追加しておく
�AHasArrayを使って、作業用のシートの同じアドレスのセルにたとえば"1"とかフラグ立てさせる
�BUsedRange.Selectで、そのセル範囲を取得する
0212デフォルトの名無しさん
2016/11/29(火) 22:12:25.19ID:iqerI5Uhそれは設計の問題
まぁプログラムに慣れるまではその感覚を持ってて当然だと思うけどね
0213デフォルトの名無しさん
2016/11/29(火) 22:32:35.46ID:m98wb1d00214デフォルトの名無しさん
2016/11/29(火) 22:32:41.82ID:Bu/YI1ZB追わなくてもいいようにクラスを作るんだぜ
0215デフォルトの名無しさん
2016/11/30(水) 00:03:18.84ID:SxJugRcTCurrentArrayのこととは違うの?
0216204
2016/11/30(水) 11:38:07.36ID:A7S95sPtそれです。バッチリできました。
どうもありがとうございます。
>>209,211 のお二人もアドバイスありがとうございました。
0217デフォルトの名無しさん
2016/11/30(水) 14:28:38.41ID:X+IOWY5Y「○○○()笑」って、括弧をずらしてるのを見かけるが、
Sub main()が元と考えてよいか?
0218デフォルトの名無しさん
2016/11/30(水) 15:39:55.02ID:n8iShQZiマジレスすると誤字が元だろうし、なんかずれてる感じがハマったんだろうし、そもそもちょっと古い
そしてそれならfunction Fnc() as 笑の方がしっくり来そう
0219デフォルトの名無しさん
2016/11/30(水) 20:19:27.59ID:c7D4Y83i「エクセルvba msgboxが表示されない」でググったらいいことあるかも
0220デフォルトの名無しさん
2016/11/30(水) 22:23:01.07ID:Cdked1mZ図のようにA列の数値が下の行と同じだった場合は
先頭行の数値だけ残してクリアするコードを組みたいのですが
以下のコードを処理しても何も起きません
アドバイスお願いします
Sub Sample()
Dim i As Integer
For i = 24 To 2
If Cells(i, 1).Value = Cells(i - 1, 1).Value Then
Cells(i, 1).Select
Selection.ClearContents
End If
Next i
End Sub
0221デフォルトの名無しさん
2016/11/30(水) 22:30:12.25ID:G7TXpy6k0222デフォルトの名無しさん
2016/11/30(水) 22:33:18.95ID:SxJugRcTFor i = 24 To 2
0223デフォルトの名無しさん
2016/11/30(水) 22:33:43.71ID:SxJugRcT0224デフォルトの名無しさん
2016/11/30(水) 22:34:09.98ID:Cdked1mZ解決しました
ありがとうございます
初歩的なつまずきですみません
もっと精進します!
0225デフォルトの名無しさん
2016/11/30(水) 23:07:38.86ID:peC29ddm期待してる
0226デフォルトの名無しさん
2016/12/01(木) 01:44:22.83ID:WV6MWzRCx = 'Sheet1の最終行をとる
Sheets('1').Cells(x,1) = Sheets('2').Cells(1,i)
Sheets('1').Cells(x,2) = Sheets('2').Cells(j,1)
Sheets('1').Cells(x,3) = Sheets('2').Cells(4,i)
みたいな処理を入れたんだが、
抜き出す個数は合ってるのに、↑の処理で抜き出した値を見るとiを+1したとこのセルが抜き出されたりしてて上手くいかない
書き直したりググったがどうしても分からないので原因と直すところを教えて欲しい
0227デフォルトの名無しさん
2016/12/01(木) 01:50:04.88ID:qbmZssP5コードは省略せず全部書け
0228デフォルトの名無しさん
2016/12/01(木) 05:00:23.62ID:GSYGTwDeクリアするだけなら一括ですればループ必要ないと思いますが
0229デフォルトの名無しさん
2016/12/01(木) 05:12:02.46ID:CgxT78nmそれだけじゃわからないですね。
0230デフォルトの名無しさん
2016/12/01(木) 07:43:23.10ID:1nlifDzR抜き出すならせめてforを書いてほしい
0231デフォルトの名無しさん
2016/12/01(木) 18:07:28.94ID:4kUT93WfVBAで複数のシートを串刺しのように集計したくて
Vlookup関数を使っているのですが
時々、数値を "."で認識してしまったり、emptyと認識してしまい
正しく集計できない箇所があります
その個所を、普通のセルにのVlookup関数として入力すると
正しく数値として認識し、集計できます
数値が"."やemptyとして認識されてしまう原因は、何か考えられますでしょうか?
0232デフォルトの名無しさん
2016/12/01(木) 18:18:41.60ID:dtYAYyM6コードに問題がある可能性が考えられる
0233デフォルトの名無しさん
2016/12/01(木) 18:20:51.19ID:CgxT78nm検索の型は?
0234デフォルトの名無しさん
2016/12/01(木) 18:38:22.70ID:1nlifDzR0235デフォルトの名無しさん
2016/12/01(木) 18:54:43.59ID:4kUT93Wf各シートの検索値の個数、順列が同じでないために、VBAでvlookupを利用して集計しないと、串刺しできないと考えてます。
バージョンはエクセル2003です
コードは、
Application.WorksheetFunction.VLookup(No, Worksheets(t).Range("a:t"), Cn1(s), False)
Noは顧客コード
変数t シート名
cn1(s) のsは行数を代入した変数
としてます
0236デフォルトの名無しさん
2016/12/01(木) 18:55:43.79ID:UrqhyqO0見えてる行だけ削除する方法はわかるのですが
Sub 見えてる行だけを削除()
Dim myRange As Range
Set myRange = Selection
myRange.SpecialCells(xlCellTypeVisible).Delete
End Sub
見えてない行だけ削除するマクロをおしえてください
0237デフォルトの名無しさん
2016/12/01(木) 19:05:21.20ID:fsrOpsKt値検索ならfor eachでやりたい気がするけど
串刺しってのが良くわからんがシートまたがって検索したいってこと?
0238デフォルトの名無しさん
2016/12/01(木) 19:06:44.61ID:fsrOpsKtfor eachでループして非表示か判定してデリートすりゃいいんじゃね
0239デフォルトの名無しさん
2016/12/01(木) 19:20:54.79ID:DdJ1vfW8>>cn1(s) のsは行数を代入した変数
"sは行数を代入した変数" というのは分ったけど
cn1() は 配列? 関数?
cn1(s) ←この値がおかしいとか?
0240デフォルトの名無しさん
2016/12/01(木) 19:29:43.52ID:T/RQ1Yi1for each を調べてみます
現在の状況は
シート数24×1500行×6列のデータを1500行×6列のシートに合計集計しています
このデーター数に対して、1〜3行(×6列全部)に対するエラーと
1,2個のエラーが発生します
エラーとなる対象のデータタイプは数値になっているのですけど
Vlookup関数では、文字列もしくは空欄と認識してしまうのです
0241デフォルトの名無しさん
2016/12/01(木) 19:41:38.96ID:1nlifDzRごめんなさい
やりたいことが全く見えないです
cn1とは何ですか?
行数を指定するならhlookupだと思います
集計するのにデータ数は変わらないのですか?
0242デフォルトの名無しさん
2016/12/01(木) 19:55:29.83ID:99opF8JXエラーとなる対象のデータに何か共通点はないの?
エラーが出るデータは本当に数字?
0243デフォルトの名無しさん
2016/12/01(木) 20:17:11.39ID:fsrOpsKt「.」は空文字、emptyはセルが空という意味だと思われる
数値型でこの二つの値が出ることはないと思うんだがな
vlookupが返す値の型は知らんけどな
0244デフォルトの名無しさん
2016/12/01(木) 22:07:39.82ID:VwZQjyuEシート名を取得出来ないって仕様ですか?
0245デフォルトの名無しさん
2016/12/01(木) 22:13:11.29ID:5vd1VDHhvlookupって昇順か降順にソートしてないと正しく動かなかったんじゃね?
0246デフォルトの名無しさん
2016/12/01(木) 22:22:09.86ID:VwZQjyuEそれは高速VLOOKUPでは?
0247デフォルトの名無しさん
2016/12/01(木) 23:05:45.27ID:DdJ1vfW8そんな事ないと思うぞ
実際どんなシート名で どうゆう コードの時 取得できないの?
>>245
第4引数の 検索方法が False の"完全一致"の時は ソート必要ないよ
0248デフォルトの名無しさん
2016/12/01(木) 23:47:14.27ID:UrqhyqO0できました
0249デフォルトの名無しさん
2016/12/02(金) 00:03:02.36ID:JjyyFj7+おめでとう
unionで結合してから消すのがおすすめだぞ
0250デフォルトの名無しさん
2016/12/02(金) 00:29:59.89ID:5/G0etdx0251デフォルトの名無しさん
2016/12/02(金) 00:37:42.24ID:494MXyvycells(1,1)= ”任意の数字”
cells(1,2)= ”計算記号”
cells(1,3)= ”任意の数字”
cells(1,4)= ”計算結果”
0252デフォルトの名無しさん
2016/12/02(金) 00:43:58.63ID:+5Uwt65C計算記号というのがランダムなのかなんでもいいのか分からないけど。
0253デフォルトの名無しさん
2016/12/02(金) 00:49:48.84ID:Asb2uwSRCells(1, 4).Formula = "=" & Cells(1, 1) & Cells(1, 2) & Cells(1, 3)
0254デフォルトの名無しさん
2016/12/02(金) 01:59:59.40ID:5/G0etdxなんでもいい
要はセルを跨いで計算式って感じ
0255デフォルトの名無しさん
2016/12/02(金) 02:05:08.49ID:rdJQBVqZがんばって。
0256デフォルトの名無しさん
2016/12/02(金) 07:39:38.72ID:YFqVXqrkありがとうございます
A列に上から順に顧客コードを1500件程度入力され
B〜G列に商品ごとの各月別売上データが格納されているシートが5年分あり
それらを集計する作業をしています
5年の間に顧客が増減していたり、商品の増減がありますので
検索したい顧客コード行数や商品名列数を、シートごとに変数に格納して集計に使っています
Cn1()の配列には、各シートごとに、Cn1(1)〜Cn1(6)まで、対象となる商品の毎の列数を格納してます
>>242
エラーとなる対象データをType関数で調べると数値になりますし
手入力でVlookup関数を使った時の戻り値も、Type関数で見ると数値になります
>>243
ありがとございます
とても勉強になります
0257デフォルトの名無しさん
2016/12/02(金) 08:02:52.89ID:IK5yXvqR値はそのまま計算に使う
演算子は分岐
これでわかんなかったら愚図
>>256
ためしに、戻り値をclngとかで型変換してみれば?
あと、空文字とかemptyが返ってくるときもlongかなにか知らんが数値型で帰ってきてる?
0258デフォルトの名無しさん
2016/12/02(金) 08:04:01.58ID:IK5yXvqR0259デフォルトの名無しさん
2016/12/02(金) 08:09:19.75ID:pOHsdbQe0260デフォルトの名無しさん
2016/12/02(金) 08:12:20.96ID:ICEEaGnY誰でもできるレベルにするだろ普通は
0261デフォルトの名無しさん
2016/12/02(金) 08:15:40.74ID:IK5yXvqR言うほど面倒か?
VBAなんだからいくらでもアプローチの仕方があるってだけだろ
0262デフォルトの名無しさん
2016/12/02(金) 08:15:55.61ID:jbEu1BDa今時はどういう段階でそういう課題が出るんだろう?高校くらい?
0263デフォルトの名無しさん
2016/12/02(金) 09:56:31.02ID:494MXyvyなるほど
要件としてはSQLなら
select A, B, Sum(C), Sum(D), Sum(E), Sum(F), Sum(G)
from 売上データ
group by A, B
で済むことをエクセル管理だからvbaで手段を探してるってことですよね?
0264デフォルトの名無しさん
2016/12/02(金) 12:10:23.24ID:ACCGXexqシートでsql使えば良い
0265デフォルトの名無しさん
2016/12/02(金) 16:41:06.89ID:pwt3cxF3ありがとうございました!
データーベースは忘れてしまったので
SQLについて確認してみます
それでも解消できなければまた質問させてください。
ほんとうにありがとうございます
0266デフォルトの名無しさん
2016/12/02(金) 16:51:33.48ID:pwt3cxF30267デフォルトの名無しさん
2016/12/02(金) 17:52:11.94ID:jbEu1BDa0268デフォルトの名無しさん
2016/12/02(金) 18:35:40.30ID:PNoycjpuSQLをすでに知ってる人がVBAに実装するサイトなら見つけたけど、その逆は見つからないね
アクセスがあれば、それに接続するの組むことで勉強にはなるだろうけど
0269デフォルトの名無しさん
2016/12/02(金) 18:46:38.44ID:rJHcu9fSアクセスを直接使えばいい様な
0270デフォルトの名無しさん
2016/12/02(金) 18:53:59.31ID:zvN95jB2それは効果的でない
0271デフォルトの名無しさん
2016/12/02(金) 19:10:36.96ID:YFqVXqrkエラー個所を手入力で入れなおしてもエラーになるので
エラーの出るシートを作り直して対応してみます
同じように入力した数値でエラー率0.01%(空欄、空文字)となるのはどうしてか・・
みなさま、ありがとうございました
0272デフォルトの名無しさん
2016/12/02(金) 21:09:40.43ID:ZW/oP1Fu可愛い彼女ができるコードを教えてください
0273デフォルトの名無しさん
2016/12/02(金) 21:24:24.52ID:494MXyvy0274デフォルトの名無しさん
2016/12/02(金) 22:33:29.62ID:rRSQCExt・おもむろにファイルエクスプローラを開く
・なんでもいいからファイルのプロパティを開く
・そこの作成日時をドラッグする
・セルのA1にペーストする
例えば 2013?年?12?月?1?日、??17:02:28
これを(すでに文字化けしてると思うが)
2013/12/1 17:02:28
に整形したいんだけど
どうすればいいんだ?
半角に見えるけどサクラでみるとU+200Fとなっている
中には数値の間にも混入しているのもある
最初からFSOで取得するのは無しで
すでに手動で取り込んだ数百件ものデータなんだ
よろしくお願いします
0275デフォルトの名無しさん
2016/12/02(金) 22:49:07.05ID:494MXyvy0276デフォルトの名無しさん
2016/12/02(金) 22:52:06.49ID:rRSQCExtゴメン、同一ディレクトリ、同一PCじゃないんだ
すでに無いファイルもあるし
0277デフォルトの名無しさん
2016/12/02(金) 23:04:07.70ID:PNoycjpu単純に文字列関数(Replaceとか)では整形できないの?
0278デフォルトの名無しさん
2016/12/02(金) 23:09:28.69ID:494MXyvyなーるほど
もう取り込んでるけど化けてて使い物にならないわけですな
replaceって手を考えるけど化けた文字の特定が難しいか
まどろっこしいやり方であれば
まず、下記を取得
s(0)=先頭から『年』の前まで
s(1)=『年』の次から『月』の前まで
s(2)=『月』の次から『日』の前まで
s(3)=『日』の次から最初の『:』の前まで
s(4)=最初の『:』の次から最後の『:』の前まで
s(5)=最後の『:』の次から最後まで
次にそれぞれに入ってる数字だけ取る
後は組み合わせる
0279デフォルトの名無しさん
2016/12/02(金) 23:13:56.67ID:AN4H0CiBSub test()
'選択範囲の文字を日付型に変更
Call Selection.Replace(ChrW(&H200E), "")
For Each c In Selection
Date_Time = Split(c.Value, "、")
c.Value = DateValue(Date_Time(0)) + TimeValue(Date_Time(1))
Next
End Sub
0280デフォルトの名無しさん
2016/12/02(金) 23:33:19.22ID:pOHsdbQeWin10+Excel2016 で 試したけど
ファイルのプロパティからコピぺすると 0x200E と0x200F 二つあるな
取りあえず A1セルだけ
Sub test()
Str1 = Range("A1").Value
Str1 = Replace(Str1, ChrW(&H200E), "")
Str1 = Replace(Str1, ChrW(&H200F), "")
Str1 = Replace(Str1, "、", " ")
Range("B1") = CDate(Str1)
End Sub
0281デフォルトの名無しさん
2016/12/02(金) 23:58:37.00ID:lnmKrIMOマクロメ、ビジュアルベーシックどちらも真っ白で何も書かれてないのに、マクロが実行できちゃうのです。もちろん他のエクセルファイルは裏で開いてません。不思議です。プログラムは一体どこに書かれているんですか。
0282デフォルトの名無しさん
2016/12/03(土) 00:07:37.10ID:MyQ8FskT0283デフォルトの名無しさん
2016/12/03(土) 00:22:21.16ID:OzARptjh/ | | | / __
|/ | /| |
| |\ | /
/ | | __/
0284デフォルトの名無しさん
2016/12/03(土) 00:39:53.44ID:nOKssCOtどういうマクロを書けばいいのでしょうか
0285デフォルトの名無しさん
2016/12/03(土) 05:41:35.59ID:HocSlEH2FUNCTIONです
0286274
2016/12/03(土) 06:47:29.48ID:ChSYpI5vReplace(Str1, ChrW(&H200E), "")
こういう書き方があったんですね。
勉強になりました。
大変助かりました
重ねてありがとうございます
0287デフォルトの名無しさん
2016/12/03(土) 09:19:09.02ID:n/AqAmtPマクロ書いてますね
0288デフォルトの名無しさん
2016/12/03(土) 09:45:06.35ID:HocSlEH2どこに?全体を見渡す方法はないですか
0289デフォルトの名無しさん
2016/12/03(土) 10:07:04.20ID:OzARptjhデザインモードボタンの右あたり。
0290デフォルトの名無しさん
2016/12/03(土) 10:26:47.21ID:n/AqAmtPfunctionはどこでわかりましたか?
0291デフォルトの名無しさん
2016/12/03(土) 11:28:39.41ID:MyQ8FskT一度画像をDLしないと無理じゃないかなぁ
0292デフォルトの名無しさん
2016/12/03(土) 12:22:23.11ID:MyQ8FskT切り貼りして作ってみた
Private Declare Function URLDownloadToFile Lib "urlmon" _
Alias "URLDownloadToFileA" (ByVal pCaller As Long, _
ByVal szURL As String, ByVal szFileName As String, _
ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long
Sub test()
Dim SaveFileName As String
Dim DownloadFile As String
Dim Ret As Long
Dim P As Object
SaveFileName = "C:\○○○.jpg"
DownloadFile = "http://〜/△△△.jpg"
Ret = URLDownloadToFile(0, DownloadFile, SaveFileName, 0, 0)
DoEvents
If Ret = 0 Then
MsgBox "ダウンロードできました。"
Set P = LoadPicture("C:\○○○.jpg")
MsgBox CLng(P.Width * 0.0378) & " × " & CLng(P.Height * 0.0378)
Else
MsgBox "エラーが発生しました。"
End If
End Sub
0293デフォルトの名無しさん
2016/12/06(火) 05:33:01.09ID:epR51daMA列にフィルターを適用し、マクロの記録で「いちご、みかん、りんご」で抽出すると
次のようなコードが出ます。
Sub Macro1()
ActiveSheet.Range("$A$1:$A$19").AutoFilter Field:=1, Criteria1:=Array("いちご" _
, "みかん", "りんご"), Operator:=xlFilterValues
End Sub
この "いちご" , "みかん", "りんご" の部分を変数に置き換えて次のようにしましたが
うまく抽出されません。どこがいけないのでしょうか。
Sub Macro2()
Dim fruits As String
fruits = "いちご" & "," & "みかん" & "," & "りんご"
ActiveSheet.Range("$A$1:$A$19").AutoFilter Field:=1, Criteria1:=Array(fruits), Operator:=xlFilterValues
End Sub
0294デフォルトの名無しさん
2016/12/06(火) 05:43:55.80ID:xBUjrFX7fruits=Array("いちご" , "みかん", "りんご")
ActiveSheet.Range("$A$1:$A$19").AutoFilter Field:=1, Criteria1:=fruits, Operator:=xlFilterValues
0295デフォルトの名無しさん
2016/12/06(火) 08:04:40.33ID:PzVoNBReArray関数を調べてから出直してきて
0296293
2016/12/06(火) 08:58:18.37ID:epR51daMうまくいきました、ありがとうございます。
>>295
そうですね。今度からもうちょっと調べてから聞くようにしたいと思います。
0297デフォルトの名無しさん
2016/12/06(火) 16:47:47.49ID:n52TsHhO共有ブックで(複数ユーザーの編集により)ファイル保存時に競合が発生する場合があります。
この時”競合の解決"ダイアログが出るのですが、この中身(どのセルが競合しているか)をVBAで取り込む方法はないでしょうか?
やりたい事は、競合している内容で判断して保存するかどうか(変更を反映するかどうか)を変えたい、です。
よってダイアログを出さずに競合変更箇所の情報が取れるならもっとも望ましいです。
保存後に変更履歴を調べられる事はわかったのですが保存前に行いたいとなるとやり方がわかりませんでした。
どなたかお知恵を貸してください。
0298デフォルトの名無しさん
2016/12/06(火) 18:22:44.38ID:YPrsoJsb別名で保存して目視で比較
0299デフォルトの名無しさん
2016/12/06(火) 18:48:27.21ID:gXV5LH5j別名で保存してfor eachで比較
0300デフォルトの名無しさん
2016/12/07(水) 03:18:30.35ID:hqVuC59gどのセルが競合してるかとなると、サーババージョン取得して全検査ぐらいしか手が無いのでは
0301デフォルトの名無しさん
2016/12/07(水) 21:30:08.74ID:ko89pn9sシート1
A B
1 東京 10
2 東京 15
3 東京 9
4 大阪 25
5 大阪 4
6 名古屋 5
7 名古屋 42
↓
シート2
A B
1 東京 34
2 大阪 29
3 名古屋 47
このような感じで、シート1のデータを参照してシート2にそれぞれの合計を入力するコードを教えてください
最終的にはシート2のデータをグラフに起こす予定です
0302デフォルトの名無しさん
2016/12/07(水) 21:49:15.61ID:bGR95WEz部分ごとの集計はVBAを使わなくてもピボットテーブルで可能なのは知った上でVBAを希望?
0303デフォルトの名無しさん
2016/12/07(水) 22:07:08.47ID:8exYmjRoピポッドでも関数でもできそう
vbaでやるのはいいけど、forとかifくらいは理解してるか?
配列は?
集計条件は決め打ちか?動的か?
0304デフォルトの名無しさん
2016/12/07(水) 22:11:04.60ID:j/iCRxZGこの手順をVBAで作ればいいんじゃね?
1)シート1のA列をシート2のA列にコピペ(Copy メソッド)
2)シート2のA列の重複を削除(RemoveDuplicatesメソッド)
3)シート2のA列のセル一つずつの値に対し WorksheetFunction.SumIf()して
その結果を隣のB列に書き出す
0305デフォルトの名無しさん
2016/12/07(水) 22:42:41.28ID:9YpE3wzxシートでSQLだな。
0306デフォルトの名無しさん
2016/12/07(水) 22:52:15.40ID:8exYmjRoまあ、使えば便利なんだけど
0307デフォルトの名無しさん
2016/12/07(水) 23:23:27.23ID:6Yw6pR2H0308デフォルトの名無しさん
2016/12/08(木) 00:24:32.24ID:Fvqb+cch0309デフォルトの名無しさん
2016/12/08(木) 00:31:42.34ID:aI8hpPNXたぶんsheet2のA列も自動で作りたいんだと思う
sumif単品だとA列ができている前提じゃなきゃ困っちゃう
0310デフォルトの名無しさん
2016/12/08(木) 00:33:16.04ID:3TNZQYrlSUMIFとかSUMPRODUCT関数使えば一番早いんじゃね?
0311308
2016/12/08(木) 02:10:15.34ID:Fvqb+cchなるほど。
VBAで「重複しないリストを作る」方法がいろいろ紹介されてるので、それコピペでいけそう。
0312デフォルトの名無しさん
2016/12/08(木) 12:50:53.05ID:4vmn+DTZoffsetで1行↓移動させたらループすぐ抜けるし、比較演算子を変えたら無限ループする
どこか初歩的な見落としがあるのかもしれんがわからぬ…
0313デフォルトの名無しさん
2016/12/08(木) 12:55:36.27ID:aa5GIQq7offsetで移動させても
起点となるセルは移動しないよ
offset(1,0)の下を見るには
offset(2,0)とかやらないと
0314デフォルトの名無しさん
2016/12/08(木) 13:56:21.16ID:83x0M9feまずはコード晒せ
0315デフォルトの名無しさん
2016/12/08(木) 14:06:07.10ID:Uai3hSgC途中までなんだけど、
Sub macro2()
Dim mycell As String
Range("N2").End(xlDown).Select
ActiveCell.Offset(, -13).Select
If ActiveCell.Value <> "" Then
Do Until ActiveCell.Offset(1).Select <> mycell
Loop
Else
End If
End Sub
正確に言えばN列のデータのある最終行まで↓に行って、そこからA列に移動して
A列に日付文字列の値があるなら次の日付まで↓に行ってoffsetで一行↑に戻して
1日の範囲を数えるというのをやろうとしていたんだがloopの後どうすればいいのかわからなくて
0316デフォルトの名無しさん
2016/12/08(木) 14:42:10.32ID:83x0M9feいちいちSelectするんじゃなくて、数え始める行がわかればいいんだから、まずは
startRow = Range("N2").End(xlDown).row
ってやって行だけを求める
そしたら次は
r = startRow
Do While Cells(r, 1) = 目的の日付
r = r + 1
Loop
ってな感じで調べながらループ
ループを抜けたら変数 r には一番下の行が入ってるから
r - startRow
って引き算すれば個数がわかる
0317デフォルトの名無しさん
2016/12/08(木) 15:10:44.49ID:Uai3hSgC言われた通りに試したらちゃんと数えられた有難う
手探りでやり始めて、何かに付けてactivecellとかselectを多用してしまう
0318デフォルトの名無しさん
2016/12/08(木) 15:17:26.29ID:krWkenKW盲点だったわ。
新規参入者なんてもうほとんどいない言語だと思い込んでいたけど、早合点だったか。
0319デフォルトの名無しさん
2016/12/08(木) 15:26:57.90ID:HI3obDVlExcel等(office)を便利にそして自動化するマクロ言語としての価値は
まだまだ十分にあると思う
0320デフォルトの名無しさん
2016/12/08(木) 17:08:20.38ID:E4uYVyowアクティブうんちゃらとかセレクト系はなるべく使わないように
シート上の動き見られるのは便利なのでそういう使い方ならわかるけども
0321デフォルトの名無しさん
2016/12/08(木) 19:32:22.83ID:S4tHP/Ae五ヶ年縛りの関係で引き継ぎしなきゃならなくなった事務員プログラマも多いだろうから、
来年度からVBAスレが阿鼻叫喚の地獄絵図になるんじゃないかなと予想してる。
0322デフォルトの名無しさん
2016/12/08(木) 19:36:32.37ID:krWkenKWなにそれ
0323デフォルトの名無しさん
2016/12/08(木) 19:38:11.39ID:aI8hpPNXはじめてきいた
0324デフォルトの名無しさん
2016/12/08(木) 19:39:03.13ID:E4uYVyowワイは地雷を生みまくっとるぞ
ドキュメント?知らん
0325デフォルトの名無しさん
2016/12/08(木) 20:47:41.53ID:q1Xyhpjuどうすれば上級者になれるだろうか
他の言語やればいいとも聞くが、昔からc++も書いてるしこれ続けてもvbaのマニアックな知識がつくとは思えん
0326デフォルトの名無しさん
2016/12/08(木) 20:55:25.00ID:vq5FWDvF〜が出来たら中級者、〜が出来たら上級者ってそれぞれに定義してくれ。イメージで話進められても困る。
0327デフォルトの名無しさん
2016/12/08(木) 21:00:54.71ID:aI8hpPNX0328デフォルトの名無しさん
2016/12/08(木) 21:24:53.19ID:Aj4WgEQO0329デフォルトの名無しさん
2016/12/08(木) 21:25:48.96ID:83x0M9fe0330デフォルトの名無しさん
2016/12/08(木) 21:27:15.05ID:q2rSz5MQライブラリをツクール
0331デフォルトの名無しさん
2016/12/08(木) 21:41:21.38ID:HI3obDVl>>もうvba中級者名乗っていいレベルに達したと思ってる〜〜
こうゆう発想がある限り 初級を抜けてない
0332デフォルトの名無しさん
2016/12/08(木) 21:52:55.96ID:Aj4WgEQO0333デフォルトの名無しさん
2016/12/08(木) 21:55:19.69ID:S4tHP/AeThisWorkbookに
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Cancel = True
End Sub
と書く。
0334デフォルトの名無しさん
2016/12/08(木) 22:11:53.55ID:S4tHP/Ae初心者:マクロの記録の延長でActiveSheetやSelectionを使用し、ホットキー動作の延長のようなマクロを作れる。
初級者:追加の参照設定をせずに使える範囲の変数を利用し、シートやフォームのオブジェクトに依存しない計算が出来る。
中級者:Declareを含む追加の参照設定を利用してエクセルに依存しない挙動を実装できる。
上級者:自己書き換えコード式学習プログラムや他言語のコンパイラを実装できる。
という定義はどうだろう。
0335デフォルトの名無しさん
2016/12/08(木) 22:12:32.91ID:q2rSz5MQ0336デフォルトの名無しさん
2016/12/08(木) 22:14:58.71ID:Aj4WgEQOThisWorkbookに書かないとダメなんですか。あとマクロをじぶんから実行しなくてもいいのですか。
0337デフォルトの名無しさん
2016/12/08(木) 22:17:36.76ID:Aj4WgEQO0338デフォルトの名無しさん
2016/12/08(木) 22:19:25.51ID:1AIJ9s0+結局5ヶ年縛りってなに?
0339デフォルトの名無しさん
2016/12/08(木) 22:25:31.45ID:niZg3S4G上級の意図がわからん
0340デフォルトの名無しさん
2016/12/08(木) 22:25:59.75ID:S4tHP/Ae有期雇用の雇用限界。
会社勤めなら皆頭抱えてると思ってたが、調べてみたら2018年04月が最短だからあと一年余裕あるのか。
0341デフォルトの名無しさん
2016/12/08(木) 22:33:27.47ID:S4tHP/Aeエクセル関数に依存しない → エクセルオブジェクトに依存しない → エクセルに依存しない → 言語に依存しない
という流れで書けば良かったと後悔している。
0342デフォルトの名無しさん
2016/12/08(木) 22:35:02.72ID:mDqDNpb5正社員にはそんなのなくね?
0343デフォルトの名無しさん
2016/12/08(木) 22:52:00.76ID:q2rSz5MQそれは中級者でしょ?そこはわかる
上級者がわからん
0344デフォルトの名無しさん
2016/12/08(木) 22:55:48.20ID:g3bJU1VMExcelのVBA書いてるのは有期雇用の人が多いってことじゃないかな?
そもそも自分の周りだと正社員含めて、(ワークシート関数やピボッドテーブルなど使って)満足にExcel使える人もほとんどいないけど。
0345デフォルトの名無しさん
2016/12/08(木) 23:36:17.11ID:vq5FWDvF上級者ってVBAと全然関係なくね?w
その定義でいうなら、unlha32.dllをdeclareで使ったりDBとやりとりができてる俺は中級者か。やったーw
0346デフォルトの名無しさん
2016/12/09(金) 00:29:04.76ID:b9ky9erQ涙をのんでVBAを学習する
つらい…
0347デフォルトの名無しさん
2016/12/09(金) 03:40:05.25ID:8cyy7TcK0348デフォルトの名無しさん
2016/12/09(金) 04:10:41.10ID:2mFmAOtuと解釈した
VBScriptもけっこう使えるよ
0349デフォルトの名無しさん
2016/12/09(金) 05:30:45.93ID:+FF0njzt0350デフォルトの名無しさん
2016/12/09(金) 06:25:47.86ID:uzv0Owyj0351デフォルトの名無しさん
2016/12/09(金) 07:07:00.02ID:K++XEq180352デフォルトの名無しさん
2016/12/09(金) 07:22:58.42ID:CLppIZfJたぶん金の問題じゃなくてセキュリティのせいかと
0353デフォルトの名無しさん
2016/12/09(金) 08:21:53.15ID:o6zCM5vxそこまでいったら中級でいいんじゃね?
まあコードコピペ卒業してないと話にならんけど
0354デフォルトの名無しさん
2016/12/09(金) 08:41:11.73ID:8cyy7TcKコピペしてから必要なところを手直ししていく
全部覚えて全部書くとか時間足りなくなっちゃう
0355デフォルトの名無しさん
2016/12/09(金) 08:49:05.46ID:nvgqC8jJ通して欲しいところ。
0356デフォルトの名無しさん
2016/12/09(金) 10:53:41.16ID:o6zCM5vx調べてもいいけど手打ちはするべきだわ
0357デフォルトの名無しさん
2016/12/09(金) 11:18:08.13ID:cvI4vmhkインテリセンスは無理かもだけど
wsfファイルで VBS使えば タイプライブラリ指定できるから ExcelVBA定数とかなら 使えるぞ
0358デフォルトの名無しさん
2016/12/09(金) 11:18:33.67ID:8cyy7TcKべき論はよくわかんないけどお前はお前のやり方でやればいい
俺は確実性を採る
それだけの話
0359デフォルトの名無しさん
2016/12/09(金) 12:30:41.47ID:cvI4vmhkコピペをするのは良いとは思うのだけど
コピペ元がない状況下で
"お手上げになる人" と "手打ちをしてでも何とかなる人"
の場合 どっちが中級者を名乗っていいのか? って話かと
0360デフォルトの名無しさん
2016/12/09(金) 12:45:27.35ID:8cyy7TcKなるほど
ごめんなさい
Excelが入ってる以上はヘルプくらいは見れると思いこんでた
そこも見れない状況で自分でも組んだことなくてわからないことがあれば何かしらで調べて手打ちするね
クラスタリングには興味ないので好きに分けてくださいな
0361デフォルトの名無しさん
2016/12/09(金) 12:50:23.86ID:cvI4vmhkクラスタリング?の話題で >>325のコピペ云々の話に参加しておきながら
興味ないとは 不思議に思う
0362デフォルトの名無しさん
2016/12/09(金) 12:53:12.86ID:cvI4vmhk〇 >>353のコピペ云々の話に参加しておきながら
0363デフォルトの名無しさん
2016/12/09(金) 12:57:21.05ID:8cyy7TcKどこかの誰かが決めたクラスタリングで最低だとしてもコピペはやめないよ
ってだけ
0364デフォルトの名無しさん
2016/12/09(金) 12:57:56.64ID:nvgqC8jJ0365デフォルトの名無しさん
2016/12/09(金) 13:20:32.71ID:o6zCM5vx0366デフォルトの名無しさん
2016/12/09(金) 17:24:13.79ID:cOteDwNo自分で1から書いた方が早い
0367デフォルトの名無しさん
2016/12/09(金) 17:32:55.65ID:2mFmAOtu他人の書いたコードが読めないと、自作の古いコードもメンテできなくなる
0368デフォルトの名無しさん
2016/12/09(金) 19:34:54.02ID:+FF0njzt2.時間が足りない。
3.全部覚える必要が無い。
これプログラマじゃなくてコーダーだから、そもそも分野が違うだろ。
0369デフォルトの名無しさん
2016/12/09(金) 19:38:59.49ID:nvgqC8jJ0370デフォルトの名無しさん
2016/12/09(金) 21:02:43.51ID:EGB1gDys0371デフォルトの名無しさん
2016/12/09(金) 21:44:48.96ID:o6zCM5vxそれもあるけど、やっぱ自分で打つって大事だと思うなあ
脳に与える信号の量が違う
コピペはその場しのぎにしかならん
0372デフォルトの名無しさん
2016/12/09(金) 22:36:48.18ID:uzv0Owyjhttp://qiita.com/advent-calendar/2016/vb
0373デフォルトの名無しさん
2016/12/10(土) 08:48:26.52ID:UQBZDQLB0374デフォルトの名無しさん
2016/12/10(土) 09:10:41.85ID:jVYdFP660375デフォルトの名無しさん
2016/12/10(土) 10:32:11.50ID:pe8BdvyAコピペのせいなのか、IF文を理解していない人間に共通する書き方なのか分からないけど、
If A Then
Else
(処理)
End If
みたいな書き方を複数の(別人の)マクロで見るんだよな。
Accessマクロか何かからコピーしてくるんだろうか。
0376デフォルトの名無しさん
2016/12/10(土) 10:45:31.32ID:iUc/mNcx名前変更したいのですが、変更するとマクロが作動しない。なぜですか。
Private Sub Workbook_BeforeClose(Cancel As Boolean) を
Sub AAA(Cancel As Boolean)にしたいのですが。
0377デフォルトの名無しさん
2016/12/10(土) 10:48:43.62ID:R9UsBJO4ツギハギだらけで整った感じがしないけど手作業で1時間以上かかるのが2分ぐらいで済むようになったw
0378デフォルトの名無しさん
2016/12/10(土) 10:56:28.05ID:VIKfqNe3イベントを受け取る関数のインターフェースは固定だから。
必要ならそのAAAって関数をイベント関数から呼ぶようにする。
0379デフォルトの名無しさん
2016/12/10(土) 11:00:03.02ID:pe8BdvyAイベントが起きた際に、固有の名前のプロシージャを拾う仕組みになっているから。
標準モジュール以外で、コード書くところの上部にある(General)と(Declarations)でイベント一覧見られる。
0380デフォルトの名無しさん
2016/12/10(土) 11:40:10.29ID:onDIAfWBElse節にしか処理がないって意味?
0381デフォルトの名無しさん
2016/12/10(土) 12:08:24.20ID:UQBZDQLB理解してないというか、それIf Notを知らんだけじゃないの?
0382デフォルトの名無しさん
2016/12/10(土) 12:21:24.62ID:YRX+c+Bxアルゴリズムとデータ構造はむしろ基礎じゃね?
0383デフォルトの名無しさん
2016/12/10(土) 12:52:49.90ID:2yEuAhZx変更できないものを変更すりゃ、そら動かんわ
0384デフォルトの名無しさん
2016/12/10(土) 13:04:34.51ID:pe8BdvyAどう設計すればいいのか思いつかず悩んでいる時に手を出して、
「結局のところケースバイケースやんけ!」と毎回なる。そんな印象。
0385デフォルトの名無しさん
2016/12/10(土) 14:23:47.00ID:15RnwqyZ未だにVBAで実装してないのが謎な 配列ソートとか
0386デフォルトの名無しさん
2016/12/10(土) 17:04:00.53ID:2fEwvIev今更新たに追加される訳もないしな。
0387デフォルトの名無しさん
2016/12/10(土) 17:13:54.99ID:iUc/mNcxシート上に閉じるのボタンを設置したい
どんなマクロを作ればいいのですか。
0388デフォルトの名無しさん
2016/12/10(土) 17:16:17.73ID:YRX+c+Bxシートのモジュールにボタンクリックをハンドルする関数とかを作ってapplicatin.quit()とか
0389デフォルトの名無しさん
2016/12/10(土) 17:22:34.51ID:15RnwqyZワークシート・ソート レベルで十分な気がする
それ以上の高機能を求めるなら 自分で実装すれば と思うのよね
俺なんか こまごまとした少量の配列ソートは バブルソートでサクッと作ってたりする
(アルゴリズムが簡単なので 手打ちで十分作れるから 大量データは死ぬほど時間かかるけどw)
0390デフォルトの名無しさん
2016/12/10(土) 17:55:31.56ID:15RnwqyZ>>333のコードと一緒に使うなら
Sub ExcelEnd()
Application.EnableEvents = False
Application.Quit
End Sub
かな? (これは マクロ名変更可能よw)
0391デフォルトの名無しさん
2016/12/10(土) 19:13:46.43ID:XiiYXH4d最初の処理が要らなくなったが、
書き直して余計なバグ発生させたくないとか。
0392デフォルトの名無しさん
2016/12/10(土) 19:34:06.06ID:iUc/mNcx0393デフォルトの名無しさん
2016/12/10(土) 19:41:02.72ID:9aWolb9Dコーディング規約とかで禁止じゃなきゃ普通に使ってる。
何もしないのを明示したいときとか、あとで変更する可能性が高いときとか。
必ずコメントはつけてるけど。
0394デフォルトの名無しさん
2016/12/10(土) 19:43:45.19ID:15RnwqyZ>>390 のマクロを ボタンにマクロ登録すればいけると思うが・・・
もしかして
マクロでも終了できなくしたいって事 考えてる?
そうまでししたい理由を教えてほしいな
0395デフォルトの名無しさん
2016/12/10(土) 19:46:08.09ID:9aWolb9Dよこからだけど、
390は標準モジュールに記述してボタンにマクロを登録。
332はthisworkbook(イベントプロシージャ)に。
0396デフォルトの名無しさん
2016/12/10(土) 20:20:19.63ID:YRX+c+Bx何回も作るのは無駄
クラスにすれば良いんじゃね
0397デフォルトの名無しさん
2016/12/10(土) 20:25:36.28ID:onDIAfWB通常のインタフェースを殺すのは迷惑だと思われるかもよ?
0398デフォルトの名無しさん
2016/12/10(土) 20:53:30.95ID:onDIAfWB関数でも一個で済むような気がするんだが
0399デフォルトの名無しさん
2016/12/10(土) 21:02:30.15ID:15RnwqyZ一々クラス作って呼びだすまでもない時 初歩的なソートという意味で書いたのね
もちろん 大量データ用に アドイン内に クイックソート作ってクラス化はしてるけど
そこまで必要ない時とか 他PCで動かしたいけど アドインインスコするまでもないとかね
いろいろあるのよ
0400デフォルトの名無しさん
2016/12/10(土) 21:13:15.32ID:onDIAfWBmyQuicksort(v) という関数と比べて使い勝手は向上するの?
0401デフォルトの名無しさん
2016/12/10(土) 21:16:25.21ID:15RnwqyZmyQuicksort()って
関数VBAであるの? 知らない教えて
0402デフォルトの名無しさん
2016/12/10(土) 21:29:33.20ID:15RnwqyZmyQuicksort()でぐぐってみたけど
ぐぐり方が悪いのかヒットしないな
知らないものとは比較できないし
そもそも 使い勝手なんか 多分に主観が入るから
俺がこうだって言ったって意味ないと思うので
使い勝手云々は 逃げたと思われたとしても スルーさせてもらうね
0403デフォルトの名無しさん
2016/12/10(土) 21:45:18.77ID:onDIAfWBmyQuicksort() って名前は仮だよ。そういう関数を作ることはできるわけじゃん。
>>399で「クラス化してる」って書いてたから、単なる関数と比べてどういう利点があるのかな?って意味。
わかりにくかったらスマソ
0404デフォルトの名無しさん
2016/12/10(土) 21:49:19.67ID:883lVJyPクラスの話は過去に色々あった様な
カプセル化とかなんとか
ソートに限れば大差ないのかもしれないけど
一般的には再利用する様なコードはクラスにした方が良いと言われている
0405402
2016/12/10(土) 21:51:03.82ID:15RnwqyZクラス化してるのはクラス化したかったからと答えておく
それ以外の理由は >>402 で書いたとおり 主観の問題もあるから答えない
0406デフォルトの名無しさん
2016/12/10(土) 21:51:16.61ID:cjh5FBfC0407デフォルトの名無しさん
2016/12/10(土) 21:52:23.68ID:883lVJyP意図せずに関数が参照している変数を書き換えてしまうと関数が誤動作してしまう
自分が作ったのなら判るだろうけど
忘れたりする可能性もある
クラスにしてメソッドが使う変数をカプセル化してそれを防ぐとか
0408デフォルトの名無しさん
2016/12/10(土) 22:07:21.51ID:onDIAfWBなるほど。主観の要素が大きいならしょうがないね。
>>407
ソートってユーザーから渡された配列を受け取って、ソートが終わったらおしまい、っていうものだよね?
何か状態を保持し続けたりするわけでもないし、書き換えてしまうおそれのある変数って
受け取った引数かローカル変数しか思い当たらない。
0410デフォルトの名無しさん
2016/12/10(土) 22:14:06.73ID:VIKfqNe3VBAだとクラスの機能自体、半端だし使い勝手が悪くなるだけな気がする。
0411デフォルトの名無しさん
2016/12/10(土) 22:25:22.60ID:883lVJyPだからソートだけなら大差ないかもしれない
一般的には再利用するならクラスの方が安全
0412デフォルトの名無しさん
2016/12/10(土) 22:30:04.51ID:onDIAfWB了解
見返したら俺が反論したかったのは>>396だけだったと気づいた
0413デフォルトの名無しさん
2016/12/10(土) 22:35:14.53ID:iUc/mNcxありがとうございました。
394さんも。
0414デフォルトの名無しさん
2016/12/10(土) 22:36:42.44ID:Mx1Yrknqインタフェースの継承って、大規模開発のためのものでしょ?
0415デフォルトの名無しさん
2016/12/11(日) 00:09:57.73ID:26poxuXbと思ったが、シートがないと状態の保存ができない!!
どうする。
ムズッムズッムズッムズッムズッムズッムズッムズッムズッ
0416デフォルトの名無しさん
2016/12/11(日) 00:51:27.18ID:86HicU2B0417デフォルトの名無しさん
2016/12/11(日) 00:55:31.82ID:4iLJwZQ7ThisWorkbookモジュールは使えないんだっけ?
0418デフォルトの名無しさん
2016/12/11(日) 02:35:58.29ID:tI/9HBMaグローバルフックをするサイトが確かあったんですが見つかりません。
どなたか知っている方いらっしゃいますか?
橙色を基調としたエクセルやVBAのチップ集が載っているサイトです。
0419デフォルトの名無しさん
2016/12/11(日) 10:14:33.57ID:JsC+H88Aform表示の際に
Application.Visible = False
にしてExcel本体は見えないようにしてる。
それで我慢しろよw
0420デフォルトの名無しさん
2016/12/11(日) 15:39:45.56ID:sVYwzRFZそれだけのキーワードが確定してるなら検索できそうな気がするけどな
0421デフォルトの名無しさん
2016/12/11(日) 16:17:22.39ID:023xDB9g普段は普通にこのプロシージャAを呼び出しているんですが
ある特定の場所から呼び出すときのみそのプロシージャAの中のたった2-3行だけは実行しないようにするためには
どうやって対処するのが定番ですか?
もちろん単細胞的にプロシージャBをコピペで作りこのプロシージャBからその対象の2-3行だけ削除して
その特定の場所からはプロシージャAではなくプロシージャBを呼び出すことにすれば可能ですが
コピペに罪悪感があります。
0422デフォルトの名無しさん
2016/12/11(日) 16:23:13.76ID:BwhVVnuLフラグになる変数渡してif節使うだけだろ
0423デフォルトの名無しさん
2016/12/11(日) 16:41:40.64ID:023xDB9gそりゃフラグでも使えばなんでもできるようになるけど
この場合のリスクはたったそれだけのことにフラグを無駄に1つ増やすことによる「複雑化のリスク」なんです。
この程度のことになにかフラグを1つ増やすとなるとこんなことは多様にあるのでそのつどフラグやらなにやらそれだけのために新しいものを増やすことばかりすると
コードが複雑になり美しくない。
プログラミングの神様ならこのようなときどうしますか?定番みたいなのはないですか?
0424デフォルトの名無しさん
2016/12/11(日) 16:46:07.60ID:JsC+H88A0425デフォルトの名無しさん
2016/12/11(日) 16:47:19.88ID:023xDB9g逆になにも考えず結果だけを求めると技術スキルの向上が望めないと思うのですが。
0426デフォルトの名無しさん
2016/12/11(日) 16:51:14.81ID:0xRb/7vzある特定の場所から呼ぶときだけわかる様にする
引数とか変数とか
0427デフォルトの名無しさん
2016/12/11(日) 16:52:03.84ID:0xRb/7vz悩む価値が無いと考える人がいても良いんじゃね
なぜ価値があると思うのか
0428デフォルトの名無しさん
2016/12/11(日) 16:57:33.31ID:023xDB9g引数は少ないほど理想です。
たくさんあるとそのプロシージャの自由度・汎用性が制限され、いろんなところから使いにくいプロシージャとなってしまいます。
このプロシージャは100行くらいあってたった3行のために1つ引数を増やすのが気持ち悪いです。
もともとこのプロシージャは引数は1個も無いですから。
>>427
スキルアップのためです。
0429デフォルトの名無しさん
2016/12/11(日) 17:15:01.05ID:0xRb/7vz気持ち悪いというのはあなたの感じ方だから他の人も同じ感じ方をするか判らない
数行を実行しない事をなんらかの形で情報伝達しないと実現できない
定番の方法は引数を追加する方法
他にもあるだろうけど
0430デフォルトの名無しさん
2016/12/11(日) 17:17:00.52ID:97kSj4nq0431デフォルトの名無しさん
2016/12/11(日) 17:19:40.23ID:023xDB9gApplication.Caller
というやつです。
でもこれどうやって使うんですか?
if文でApplication.Callerを使って判別しようとしたけどApplication.Callerの値の型が分からない。
0432デフォルトの名無しさん
2016/12/11(日) 17:20:25.46ID:sVYwzRFZ0433デフォルトの名無しさん
2016/12/11(日) 17:22:30.87ID:SGarNxNyhttps://msdn.microsoft.com/ja-jp/library/office/ff193687.aspx
0434デフォルトの名無しさん
2016/12/11(日) 17:23:59.01ID:0xRb/7vzapplication.callerでは呼び出し元プロシージャは判らない
定番はoptional引数追加
0435デフォルトの名無しさん
2016/12/11(日) 17:24:39.21ID:97kSj4nq普段呼び出す場合と特定の場所から呼び出す場合で、処理の意味が違うなら素直に別のプロシージャを作る
同じような処理なのに、特定の場所から呼び出す場合に対応できないならプロシージャAの設計が悪い
プロシージャAは引数なしだと言うが、無意識にデフォルト引数を考慮しているだけでは?
自由度・汎用性というなら、引数を取るのが正解なんじゃないか?
適切で必要な引数を取ることを複雑になるとは思わない
むしろ引数がないからこそ汎用性が下がって複雑になる場合もある
0436デフォルトの名無しさん
2016/12/11(日) 17:53:50.89ID:bBR4GMik0437デフォルトの名無しさん
2016/12/11(日) 17:57:25.86ID:wm/1F8TY0438デフォルトの名無しさん
2016/12/11(日) 18:09:01.09ID:cu/yECuQ> もともとこのプロシージャは引数は1個も無いですから。
グローバル変数でやり取りしてるのか?
真面目に基礎からやり直した方がいい
もっといいのはこの業界から足を洗うことだと思う
0439デフォルトの名無しさん
2016/12/11(日) 18:41:17.45ID:4iLJwZQ7引数が1個もない、ということから複数の可能性が考えられる
いつも同じ制御をたどって同じ結果を返す
グローバル変数などを参照・変更しつつ制御をコントロールし、異なる結果を返す
ワークシートを参照・変更しつつ 〃
あんたのはどれ?
0440デフォルトの名無しさん
2016/12/11(日) 18:41:33.01ID:joPEoOmt0441デフォルトの名無しさん
2016/12/11(日) 20:10:02.64ID:Qe/hbe0Fどんな目的なんだその
プロしジャー。
自由度と汎用性は
目的次第な面があるけど
、意味に踊らせれてる感があるよ
0442デフォルトの名無しさん
2016/12/11(日) 20:46:30.28ID:NaScrWu0グローバル変数使う方が引数増やすよりよっぽどクソだろ
0443デフォルトの名無しさん
2016/12/11(日) 22:19:14.14ID:4iLJwZQ70444デフォルトの名無しさん
2016/12/11(日) 22:21:43.58ID:cu/yECuQ>>421 のプロシージャがどんなもんかがわからんのでなんとも言えないけど
Sub A1
処理1
処理2 ' たった2〜3行
処理3
End Sub
みたいな奴なら
Sub A1
Call P1
処理2
Call P3
End Sub
Sub A2
Call P1
Call P3
End Sub
Sub P1
処理1
End Sub
Sub P3
処理3
End Sub
ってやるかな
0445デフォルトの名無しさん
2016/12/11(日) 22:29:58.55ID:fmXJdiQ8VBだと昔のBASICの名残であんまり分けないことが多い気がするけど、C言語は複雑で意味のわかりにくい数式だとたった1行でも関数に分けて
読みやすくしたがる人もいるからなあ
そんなのはコメントを書けば十分という人もいるし、まあ人それぞれだな
こういうのは人に聞いたってしょうがない
自分で悩んで経験を積んでマイルールを決めていくもんだ
そういう部分でいちいち悩まないのが上級者ってやつだと思う
0446デフォルトの名無しさん
2016/12/11(日) 23:12:57.98ID:NaScrWu0確かに、そうするべきだな
100行以上あるプロシージャーって時点でまずそこが間違ってるわ
0447デフォルトの名無しさん
2016/12/11(日) 23:29:27.06ID:3yj6gm48>>444
多分P1とP3の間で変数やりとりするのに引数大量に必要になるから、それもダメでは?
全部グローバル変数にするとか愚の骨頂だし
0448デフォルトの名無しさん
2016/12/11(日) 23:51:10.91ID:gxiyMp/kそうだね
定番を聞いてきたから 定番を答えたら
それは (神の)教えに反する間違ってる(異端だー)だもの
0449デフォルトの名無しさん
2016/12/11(日) 23:51:43.37ID:88RT9zSFそれができないとしたらプロシージャの設計が悪い
もっと言えばアルゴリズムが悪い
0450デフォルトの名無しさん
2016/12/11(日) 23:57:07.93ID:sVYwzRFZ引数やローカル変数の数は出来るだけ少なく、グローバル変数は極力使わず、
制御構造のネストは出来るだけ浅くが基本だからな
企業によっては妙な縛りを言語に詳しくない奴が勝手に決めてて出来ない理由もあるかも
知れないが
0451デフォルトの名無しさん
2016/12/12(月) 00:33:41.56ID:7hVHE+7/まあ無難なところだわな
0452デフォルトの名無しさん
2016/12/12(月) 01:17:20.35ID:ydTJn2WHIF や Withを使う方が一行で書くより処理が早いことも可読性が高いことも多々あるからそんな基本気にするのは初心者のうちだけだろ
0453デフォルトの名無しさん
2016/12/12(月) 01:31:12.04ID:i6nITIBnしかし計算式を短縮して1%のスピードアップならやらない方がいい
見通しが悪くなったおかげで、それ以上の時間を保守で浪費するだけ
0454デフォルトの名無しさん
2016/12/12(月) 06:17:00.66ID:0MvKSkg9もし気にくわない量の引数が必要になるんだったらクラスのメンバーとして管理すればいい。
0455デフォルトの名無しさん
2016/12/12(月) 08:06:41.47ID:F69iUWZo配列とかコレクションでもいいけど要素数とか型とかかっちりしたいならクラスの方がよさげ
0456デフォルトの名無しさん
2016/12/12(月) 08:16:39.09ID:Ca0fyYhPRelaxTools ってアドインがグローバルフックでリストボックスのマウススクロールに対応しとったで
0457デフォルトの名無しさん
2016/12/12(月) 09:53:28.60ID:WwPYZCALクラスにまとめて(たくさんの状態を抱えても)外から見えなくすればOK、というものではない。
最初からそうしろということではなく、二度目からはね。
0458デフォルトの名無しさん
2016/12/12(月) 10:31:42.47ID:F69iUWZo依存性やらなんやらってことか
できるだけ一対一くらいでやり取りしたいわな
0459デフォルトの名無しさん
2016/12/12(月) 11:52:56.78ID:WwPYZCALそう。
パターンは複数あるだろうから、最初から全方位に向けて汎用性を求めるなんて出来ないけどね。
最初は大きかったクラスがだんだん小さくなるってのがいい兆候。
0460デフォルトの名無しさん
2016/12/12(月) 12:33:16.72ID:8Gj445kL探していたサイトは無くなってました。
https://web.archive.org/web/20131112102506/http://veaba.keemoosoft.com/2013/11/728/
0461デフォルトの名無しさん
2016/12/12(月) 12:46:02.51ID:F69iUWZoいうてその処理内でしか使わないならそこまで気にせんでも良さそうだが
何回もいろんなとこで使うんかね
0462デフォルトの名無しさん
2016/12/12(月) 12:55:48.13ID:aLE+Z42QType って知ってる?
0463デフォルトの名無しさん
2016/12/12(月) 13:00:03.60ID:WwPYZCAL「二度目からは」ってのは複数箇所から参照したくなったりしたら、という意味。
0464デフォルトの名無しさん
2016/12/12(月) 13:01:59.88ID:HOkh+6ezこれ↓なんかどうなんだろうか? 使った事ないから間違ってるかもだけど
Visual Basic 6.0 IDE でマウス ホイール イベントが機能しません。
https://support.microsoft.com/ja-jp/kb/837910
>>注 ほとんどの VBA 環境でこのアドインを使用することもできます
とか書いてるし
0465デフォルトの名無しさん
2016/12/12(月) 14:53:18.92ID:KHTlL8cvシート上に専用のボタンを作ってそこで
Application.OnTime EarliestTime:=TimeValue("12:00:00"), Procedure:="Test"
としたのですが、このTestというサブルーチンなのですが、
マクロが出来る別の標準モジュール(Module1とか)に作ればそのTestという
サブルーチンが実行されるのですが、このボタンを作った
シートのところ(Sub Buttun_Clickがあるところ)に
Public Sub Test()
--
End Sub
としても、Testがありませんというエラーメッセージが出てきます
ボタンと同じシートのところのサブルーチンも扱えるようには出来ませんか
時間がきたときに、他のボタンを実行させたいのです
0466デフォルトの名無しさん
2016/12/12(月) 15:44:28.73ID:HOkh+6ezやり方を2つほど
その1)
Application.OnTime EarliestTime:=TimeValue("15:02:00"), Procedure:="sheet1.Test"
注意)ここで sheet1は シート名 ではなく シートオブジェクト名を指定する
その2)
標準モジュールに下を書いておいてそれをOnTimeで実行するようにする
Sub testx()
Call Sheets("Sheet1").Test
End Sub
0467デフォルトの名無しさん
2016/12/12(月) 16:06:42.11ID:KHTlL8cvありがとうございました。できました
0468デフォルトの名無しさん
2016/12/12(月) 20:07:36.83ID:iMrIDuU/3回同じパターンがあったらまとめろって言うの
0469デフォルトの名無しさん
2016/12/12(月) 20:09:50.87ID:0MvKSkg9Collection型やDirectory型に役目を食われて使いどころの分からないTypeか。
ほんとあれ何処で使うんだよ。
0470デフォルトの名無しさん
2016/12/12(月) 21:00:47.48ID:HNke9LPWお前なにか勘違いしてね?
型をかっちりしたいの意味もわかってないのかよ w
0471デフォルトの名無しさん
2016/12/12(月) 21:08:19.40ID:0MvKSkg9ああ、「かっちりしたい」を読み飛ばしてたわ。
でもそれならClassでいいわ。
0472デフォルトの名無しさん
2016/12/12(月) 21:11:51.35ID:F69iUWZoみんな結構使うんか?
0473デフォルトの名無しさん
2016/12/12(月) 21:12:03.53ID:zdzgclww0474デフォルトの名無しさん
2016/12/12(月) 21:58:06.60ID:HNke9LPWユーザー定義型で済むところにクラスなんて使ったことない
0475デフォルトの名無しさん
2016/12/12(月) 23:11:36.90ID:UOaCcZ7S0476デフォルトの名無しさん
2016/12/12(月) 23:26:54.93ID:FiQhBLz20477デフォルトの名無しさん
2016/12/13(火) 21:46:01.65ID:3SM5S2zT結構使い方にクセがあるけど
0478デフォルトの名無しさん
2016/12/13(火) 22:26:57.67ID:QH1BpzM1重なっているものもありそういうのは文字が見にくいです。
そのためマクロで重なりを自動的に回避して例えば右下に移動させたいのですがどういうコードを書けばいいでしょうか?
単に2つを比べて移動させると、その移動によってあらたな重なりも生じてしまう可能性も考えなければなりません。
0479デフォルトの名無しさん
2016/12/13(火) 22:41:26.99ID:roU5iSXl全シェイプを左上から一列に並べるのが一番簡単で早い
0480デフォルトの名無しさん
2016/12/13(火) 22:47:02.05ID:QH1BpzM1それじゃ困ります。
Shapeはシートのセルの説明みたいなものだからそれぞれのShapeはそのセルの近くに置く必要があります。
0481デフォルトの名無しさん
2016/12/13(火) 22:47:13.86ID:jG3FZ5+uそもそも なぜそのような状況が発生してしまうのか?
対処療法考えるより 根本原因を改善した方が良いのではないのか
0482デフォルトの名無しさん
2016/12/13(火) 22:50:15.43ID:QH1BpzM1重なってしまうからです。
ふつうは説明すべきセルは離れ離れだけどたまたま密集していることもあるのです。
0483デフォルトの名無しさん
2016/12/13(火) 22:52:49.32ID:nYjosj1h0484デフォルトの名無しさん
2016/12/13(火) 22:55:30.58ID:jG3FZ5+uそもそもとして最初から重ならないように配置すべきで
100個も貼り付けてしまった後で何とかしようとするのが間違い
0485デフォルトの名無しさん
2016/12/13(火) 22:59:21.03ID:bhfgIeBnセルの位置とシェイプの大きさを取得して
からならない様にシェイプを移動させるコードを書けば良いよ
0486デフォルトの名無しさん
2016/12/13(火) 23:30:03.28ID:8Fw4niJCそういうのは移動の方向や距離などの条件を細かく決める必要があって
プログラムを作る上で、これが一番面倒で難しい作業であると同時に
それはあなたにしか決めることができない
よって、ここで解決は無理
0487デフォルトの名無しさん
2016/12/13(火) 23:57:11.79ID:bDsracPEあとは色の変わっているところだけ手動で位置調整をすれば良い。
全部自動とか全部手動とかこだわるから思考停止になるんだよ。
自動化を一番迅速に楽に実装できる部分だけに絞って効果を最大化することを考えろ。
0488デフォルトの名無しさん
2016/12/14(水) 04:18:56.26ID:13eYjjoE0489デフォルトの名無しさん
2016/12/14(水) 11:43:25.11ID:onXTJmaJただ、移動とか座標を取得しなきゃいかんし糞ほどめんどくさそうだな
APIいじらないかんでしょたぶん
0490デフォルトの名無しさん
2016/12/14(水) 15:53:09.41ID:jk7qaWMV座標と幅と高さを取得して、重なってたら重なってるObjectの右下に移動させる
これをオブジェクト番号順ではなく座標が左上にある順にひたすらループするだけ
ただしその結果が希望するような見やすい位置になってるかどうかは全く別の話だし
多重ループで処理時間はかなりかかると思われる
0491デフォルトの名無しさん
2016/12/14(水) 16:24:12.61ID:KjcwbQ3M図形によっては図形間の隙間が結構空いてて結局手動で詰める事になったり
0492デフォルトの名無しさん
2016/12/14(水) 20:30:34.17ID:13eYjjoEやろうとするとベジェ曲線のコリジョン判定処理を独自にくみ上げる必要が出てくるし、
要求に応える為の様々なオプションを付けるとすれば割と途方もない規模になるよなぁ。
0493478
2016/12/14(水) 22:59:05.42ID:4v+aZ1SH結局自分で考えてこうすることにした。
(1)すべてのShapesが重なりがなくなるまで小さくする。
(2)その状態ですべてのShapesをグループ化して1つのShapeにする。
(3)そのグループ化したShapeを先に小さくした分だけ大きくする。
なにごとも天才なら頭の良さとヒラメキでどうにでもなるものだ。
0494デフォルトの名無しさん
2016/12/14(水) 23:05:28.53ID:M5SiyZhJというか偽物だろw
0495478
2016/12/14(水) 23:12:34.47ID:4v+aZ1SHかさならなくなった時点で1つのShapeにGroup化してるから
そこからいくら大きくしてもかさならないことが保障されている。
0496デフォルトの名無しさん
2016/12/14(水) 23:18:31.66ID:M5SiyZhJ意味ねえw
0497デフォルトの名無しさん
2016/12/14(水) 23:24:02.76ID:1EAbcBEm0498デフォルトの名無しさん
2016/12/14(水) 23:25:16.56ID:4v+aZ1SH>>497
縮小するときは左上の座標で言うと(0 , 0)を焦点として縮小するから
元の位置とほぼ同じになる。
0499デフォルトの名無しさん
2016/12/14(水) 23:30:28.90ID:M5SiyZhJ1つずつ順繰りに表示するようにした方がいい気がする
0500デフォルトの名無しさん
2016/12/15(木) 00:01:54.49ID:pjYBUiDUちょっと動くだけでチラチラチラチラチラチラチララチラチラチラチララチラチラチラチラ
くそっ。
0501デフォルトの名無しさん
2016/12/15(木) 00:10:12.59ID:RCWBglWc君が元質問者で それで目的達成すると言うなら
それでいいんじゃね
ただ
>>(1)すべてのShapesが重なりがなくなるまで小さくする
この時点で 各Shapesの縮小率がいっしょならいいね
違うと (3)どうするんだろ? という疑問が残るが
もしかして 最大の縮小率に合わせるのか?
まどうでもいいけど 色々破綻しそうな理論ではある
0502デフォルトの名無しさん
2016/12/15(木) 00:12:38.37ID:HWr5hmeF多人数で好きなように拡張していく形式の最終形って感じがするね。
0503デフォルトの名無しさん
2016/12/15(木) 06:58:24.42ID:U+Bcsm2o嘘つきバレバレ
やってみたけどならない
縮小はそれぞれのシェイプの位置で行われるのに、グループ化して拡大したら位置関係も拡大されるんだからなるわけない
アホらしい
0504デフォルトの名無しさん
2016/12/15(木) 07:19:51.54ID:IMweaaWq0505デフォルトの名無しさん
2016/12/15(木) 09:09:02.75ID:JpPj6O8eつーか、シェイプの処理を自動化しなきゃいかん時点でかなり破綻してるような
どういう運用の時発生するんだろう
0506デフォルトの名無しさん
2016/12/15(木) 10:27:00.20ID:hyaJa9BRExcelをそういう方面に使うほうが間違っている
0507デフォルトの名無しさん
2016/12/15(木) 16:13:55.04ID:14l+W1u00508デフォルトの名無しさん
2016/12/15(木) 18:49:57.97ID:RKFY0LMW0509デフォルトの名無しさん
2016/12/15(木) 21:09:08.62ID:pjYBUiDUそれならポリゴンばりばりでも良いと思うんですよ。
目標は秒間300万ポリゴン
0510デフォルトの名無しさん
2016/12/15(木) 23:19:47.37ID:22t341mUオブジェクトエラー424となってしまいます。
エラー自動的に回避をして再度、この処理を繰り返すことは可能なのでしょうか?
For Each objTag In objIE.document.getElementsByTagName(
0511デフォルトの名無しさん
2016/12/15(木) 23:21:36.47ID:22t341mUIf InStr(objTag.outerHTML, "探す画像番号") > 0 Then
objTag.Click
このあとに書くべきコード(エラー回避して繰り返し実行)
どなたか教えていただけますでしょうか。
よろしくお願い致します。
0512デフォルトの名無しさん
2016/12/16(金) 00:08:39.42ID:gLG6TFVG0513デフォルトの名無しさん
2016/12/16(金) 00:14:42.49ID:YdJc2ZoQ5w1hな
0514デフォルトの名無しさん
2016/12/16(金) 20:16:25.06ID:YsuG8/qsそこを関数にして、関数の中でOn Errorでエラーをキャッチして、
そのエラーの状態を戻り値なり参照渡しの引数なりで関数の外に受け渡して、
それを見て対象のエラーならDo WhileやDo Until、
回数を制限するならFor Nextでもいいけど、
そんなんでループさせてやるのが楽だと思う。
0515デフォルトの名無しさん
2016/12/16(金) 21:56:20.80ID:sih3dP1Iただ、エラーになる原因突き止めてそうならないようにちゃんとするべきだと思う
0516デフォルトの名無しさん
2016/12/16(金) 23:24:10.89ID:ab20H/kd良い響きだ。
まじめに処理書くのが面倒な時の、魔法の言葉。
0517デフォルトの名無しさん
2016/12/16(金) 23:46:16.14ID:ojLHIDWP0518デフォルトの名無しさん
2016/12/17(土) 00:36:25.87ID:WZMzwZtI本当は「エロー」って書きたいのに、
会社のやつだから、仕方なく「エラー」って書いてる、小心者の私。
0519デフォルトの名無しさん
2016/12/17(土) 06:49:51.36ID:RJpi1Tn9SHEETS(RANGE(”A1”)).SELECTでその名前のシートをアクティブにできるかと思いやったんですがダメなんですがどう書けばいいのですか
0520デフォルトの名無しさん
2016/12/17(土) 06:57:46.39ID:PQF9A4Zqってやってできたけど
0521デフォルトの名無しさん
2016/12/17(土) 07:07:21.64ID:RJpi1Tn9バリューが必要ですか、サンクス
0522デフォルトの名無しさん
2016/12/17(土) 08:15:11.39ID:nEjxq6yb数値とか日付を考慮してのことか?
0523デフォルトの名無しさん
2016/12/17(土) 08:40:25.86ID:v5A0SLHPシートのプロパテイ見てみろよ。オブジェクト名を指定するんだよ
0524デフォルトの名無しさん
2016/12/17(土) 09:38:44.05ID:s55gxQDX数値はインデックス番号になる
日付はやったことないけど文字列に変換するんじゃね?
>>523
文字列と数値の両方を受けるためにオブジェクトになってるだけ
0525デフォルトの名無しさん
2016/12/17(土) 12:28:46.23ID:nEjxq6ybまあなんというか、暗黙的に受け取らないんだなって思っただけ
0526デフォルトの名無しさん
2016/12/17(土) 12:41:39.57ID:w1J67MDzか
http://qiita.com/advent-calendar/2016/vb
0527デフォルトの名無しさん
2016/12/17(土) 18:16:35.28ID:0wFiop+F0528デフォルトの名無しさん
2016/12/17(土) 20:17:25.37ID:WZMzwZtI__________
\ \ \ \ \
| ̄ ̄| ̄ ̄| ̄ ̄| ̄ ̄|
|__|__|__|__|
\ \ \ \ \
| ̄ ̄| ̄ ̄| ̄ ̄| ̄ ̄|
|__|__|__|__|
/ / / / /
/ / / / /
| ̄ ̄| ̄ ̄| ̄ ̄| ̄ ̄|
|__|__|__|__|
/ / / / /
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
0529デフォルトの名無しさん
2016/12/17(土) 21:12:59.59ID:pr4QSNov0530デフォルトの名無しさん
2016/12/17(土) 21:13:10.76ID:ymMZ5Rhw見づらい
0531デフォルトの名無しさん
2016/12/17(土) 21:42:53.62ID:7cqgcho+Dim myCon As ADODB.Connection, myCmd As ADODB.Command, myCmb As ADODB.Command, FileName As String
Set myCon = New ADODB.Connection
Set myCmd = New ADODB.Command
Set myCmb = New ADODB.Command
FileName = ThisWorkbook.Path & "\\○○"
myCon.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & FileName
With myCmd
.ActiveConnection = myCon
.CommandText = "○○" '仕様書アクションクエリを指定
.Execute 'クエリを実行
End With
With myCmb
.ActiveConnection = myCon
.CommandText = "○○" '仕様書アクションクエリを指定
.Execute 'クエリを実行
End With
Set myCmd = Nothing
myCon.Close: Set myCon = Nothing
End Sub
0532デフォルトの名無しさん
2016/12/17(土) 21:43:17.48ID:7cqgcho+Excelを立ち上げ、参照設定を変更し、上記のコードを貼り付けるとクエリが実行できますが、
次にExcelファイルを開いてコードをはしらせるとオートメーションエラーが出てしまいます。
解決策をよろしくお願いします。
0533デフォルトの名無しさん
2016/12/17(土) 22:14:15.09ID:rR+vbhBvどこでエラーが出るのか
コネクションが出来てないとか?
0534デフォルトの名無しさん
2016/12/17(土) 22:18:28.10ID:7cqgcho+myCon.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & FileName
ここでエラーになります。
0535デフォルトの名無しさん
2016/12/17(土) 22:24:05.96ID:7cqgcho+すみません。
初心者でコネクションがよくわかりません。
0536デフォルトの名無しさん
2016/12/17(土) 22:50:10.37ID:rR+vbhBvそこがコネクションを張ってるところ
アクセスを終了してないからかも
タスクマネージャとかでプロセスを見てみたら?
0537デフォルトの名無しさん
2016/12/17(土) 23:11:50.27ID:7cqgcho+見てみます。
ありがとうございます
0538デフォルトの名無しさん
2016/12/18(日) 09:26:31.47ID:rplAK2uhファイル名の指定で\が2つ続けてあるのはそれで合ってるの?
エクセル使っててそういうファイル名を使った事がないんだけど。
0539デフォルトの名無しさん
2016/12/18(日) 10:31:41.68ID:SPvC2mfNパスの後に\\ってのは聞いたことないな。
0540デフォルトの名無しさん
2016/12/18(日) 10:58:00.23ID:uFjJW9PEACCESS の存在意義的にどうなんだろ。
0541デフォルトの名無しさん
2016/12/18(日) 11:11:31.54ID:x5kxwi+uSQLは単なるデータベース
Accessはデータベースに便利なツールを含む統合環境
0542デフォルトの名無しさん
2016/12/18(日) 11:50:52.45ID:RI1Pajt6早くユーザーをSQL Serverへ移したいんじゃないのかな。
0543デフォルトの名無しさん
2016/12/18(日) 11:54:26.43ID:uFjJW9PEもう一度SSMS(16.5.1)ダウンロードしてるところw
0544デフォルトの名無しさん
2016/12/18(日) 14:40:35.54ID:JzZ8hCKj同時にいじったら壊れるってなんやねん
0545デフォルトの名無しさん
2016/12/18(日) 15:21:57.98ID:V0Dt9dCT個人向けの設計だからじゃね
その代わり手軽に使える
本格的にやるならORACLE, SQL SERVER, POSTGRESQL, MYSQLとか使うんじゃね
0546デフォルトの名無しさん
2016/12/18(日) 16:20:53.49ID:JzZ8hCKjofficeしか使えない環境ってのがあるのよ
まあでもなくなったら代替策すら検討されなさそうだけど
AccessVBAも何となく好きじゃないわ
0547デフォルトの名無しさん
2016/12/18(日) 16:54:57.93ID:uFjJW9PEクライアントとしてSQL Serverを参照するだけならOfficeのみでいけるけどね
0548デフォルトの名無しさん
2016/12/18(日) 17:07:35.96ID:F6KIg1cK【したいこと】
大量にあるセルのうち一部だけ移動
【例】
| A | B | C | D | E |
-----------------------
1 | |や |あ | | |
-----------------------
2 | | |お |は |よ |
-----------------------
3 | | |マ |リ |オ |
-----------------------
4 | | | | | |
-----------------------
5 |○ |× |△ | | |
があったとき、
B1の「や」とC1の「あ」を1文字左へ、
A5,B5,c5の○×△を1文字右へずらしたい。(2−4行目は変更なし)
誰か教えてくださいお願いします
0549デフォルトの名無しさん
2016/12/18(日) 17:50:32.80ID:CFuzcgv7マクロの記録でいいんじゃね?
0550デフォルトの名無しさん
2016/12/18(日) 17:57:03.28ID:708kAp5Eなにその方眼紙状態www
ループ処理して
A/B列両方に何か入ってたら A列以降を Cut & Paste で一セル右へ
A列空でB列に何か入ってたら B列以降を Cut & Paste で一セル左へ
これでいいんじゃね?
Cut & Paste はマクロ記録すれば分る
0551デフォルトの名無しさん
2016/12/18(日) 18:50:46.14ID:JzZ8hCKjそういうもんなの?
いじれるなら移行したいわ
0552デフォルトの名無しさん
2016/12/18(日) 18:52:27.70ID:JzZ8hCKj条件があやふやすぎる
単純にアドレス指定のコピペでダメな理由がある?
0553デフォルトの名無しさん
2016/12/18(日) 19:22:26.04ID:SPvC2mfNループとIFで処理して、
結果を貼り付け。
0554デフォルトの名無しさん
2016/12/18(日) 20:24:26.33ID:uFjJW9PEshiftとかrotateとかそういうやつね
0555デフォルトの名無しさん
2016/12/18(日) 21:34:55.78ID:CFuzcgv7SQL-Server にアクセスしたいだけなら Office なんてなくても PowerShell でもできるで
0556デフォルトの名無しさん
2016/12/19(月) 08:26:52.28ID:G23cuE2Iパワーシェルも使えんぞ(憤怒)
0557デフォルトの名無しさん
2016/12/19(月) 08:36:06.28ID:s4WNerU2お前の能力のなさをこんなところで開陳されても困る
0558デフォルトの名無しさん
2016/12/19(月) 10:10:32.47ID:FVK2IiuV権限の話じゃね?
0559デフォルトの名無しさん
2016/12/19(月) 12:53:26.86ID:s4WNerU2PowerShell まで禁止してる所があるの?
0560デフォルトの名無しさん
2016/12/19(月) 13:00:35.38ID:K4KX9bpoされとるよ
0561デフォルトの名無しさん
2016/12/19(月) 14:08:44.01ID:f+ROaaHN0562デフォルトの名無しさん
2016/12/19(月) 15:57:02.06ID:FVK2IiuV0563デフォルトの名無しさん
2016/12/19(月) 17:47:43.58ID:nkfgQpHKマジで?
そりゃ知らんかった
0564デフォルトの名無しさん
2016/12/19(月) 17:49:40.84ID:nkfgQpHK> exeやdllをダウソして動かすだけならOK
なのに PowerShell はダメなの?
すごく不思議なポリシーやね
0565デフォルトの名無しさん
2016/12/19(月) 17:51:59.31ID:AHYBAmxPなんも使えないからせめて標準でついてるPowershell勉強したろ!って思ったら弾かれて涙
0566デフォルトの名無しさん
2016/12/19(月) 19:03:53.21ID:bgqj3/OB0567デフォルトの名無しさん
2016/12/19(月) 20:05:16.09ID:hsT/+yfzはじかれた理由は知りたいね
モノを知らずに外から取り入れなきゃならないと感じてしまったためにダメって言われたのならまだ巻き返せる
0568デフォルトの名無しさん
2016/12/19(月) 20:17:52.13ID:vRLCGPATそしてそれくらい出来るヤツがいた方がセキュリティ的には安心。
0569デフォルトの名無しさん
2016/12/19(月) 20:41:16.66ID:x+r4kjDEあとタスクバーの位置すら変えられないしコマンドプロンプトも起動できない
0570デフォルトの名無しさん
2016/12/19(月) 20:54:30.15ID:fyiPi9B4自社でしか使わないOSを開発してメリットあるの?
他社と情報交換とかしないの?
0571デフォルトの名無しさん
2016/12/19(月) 20:54:30.43ID:4V94P68wでっかい会社の子会社だからガチガチなのよ
変なところで
0572デフォルトの名無しさん
2016/12/19(月) 20:57:05.82ID:fyiPi9B4ちゃんと理由とか名目があるだろう
子会社→powershellを使えない
は論理的ではない
0573デフォルトの名無しさん
2016/12/19(月) 20:59:30.47ID:4V94P68wいや知らんがな
権限無いもんは無い
0574デフォルトの名無しさん
2016/12/19(月) 21:04:00.66ID:fyiPi9B4何の説明もない会社なの?
自分が知らないだけじゃない?
0575デフォルトの名無しさん
2016/12/19(月) 21:06:13.75ID:FVK2IiuVどの程度見られるの?
0576デフォルトの名無しさん
2016/12/19(月) 21:07:23.27ID:I1HgbcB80577デフォルトの名無しさん
2016/12/19(月) 21:10:31.69ID:4V94P68wもうひとつの端末はインターネッツが見れん
端末監視されてるから権限いじったら間違いなく怒られるだろ
0578デフォルトの名無しさん
2016/12/19(月) 21:14:01.84ID:vRLCGPAT他社との情報交換にOSの違いがなんか影響するのか?
0579デフォルトの名無しさん
2016/12/19(月) 21:20:10.86ID:oMD81TTK0580デフォルトの名無しさん
2016/12/19(月) 21:29:24.02ID:fyiPi9B4オフィスが動かなくて市役所のLinux利用が中止になったりしただろ
でメリットあるの?
0581デフォルトの名無しさん
2016/12/19(月) 21:38:41.45ID:vRLCGPAT会社として意図しない動作を抑制する事が出来て比較的簡単にセキュリティ性を向上させられるというメリットがある。
銀行とか独自OSだし、セキュリティが最重要視される所だと割と一般的なアプローチだと思うよ。
もちろん技術者次第ではあるんだけど、会社の業務が非常に限定的ならそこまで金掛けずに開発出来そう。
そして情報交換とアプリケーションが動くかどうかは別問題だろ。
0582デフォルトの名無しさん
2016/12/19(月) 21:49:55.52ID:FVK2IiuV0583デフォルトの名無しさん
2016/12/19(月) 21:53:58.31ID:WICqKmJg0584デフォルトの名無しさん
2016/12/19(月) 21:58:07.34ID:fyiPi9B4銀行のどこが何て言うOS?
0585デフォルトの名無しさん
2016/12/19(月) 22:00:48.29ID:FVK2IiuV0586デフォルトの名無しさん
2016/12/19(月) 22:02:28.01ID:z+7jE5Csブログ系サービスは全滅
githubもスタックオーバーフローも当然見れない
いちいちググりながらじゃないとコード書けないやつは生きていけない業界です。
0587デフォルトの名無しさん
2016/12/19(月) 22:12:13.67ID:FVK2IiuV0588デフォルトの名無しさん
2016/12/19(月) 22:25:59.65ID:dOY4oZJlじゃ俺ダメだわw
0589デフォルトの名無しさん
2016/12/19(月) 22:53:15.00ID:OpihZzPhfossBytesに11月19日(米国時間)に掲載された記事「Microsoft Replaces Command
Prompt With PowerShell As Windows 10 Default Shell」が、Windows 10の
デフォルトシェルがコマンドプロンプトからPowerShellに変更されると伝えた。
Windows 10 Insider Build 14971ですでに入れ替えが実施されたと説明がある。
http://news.mynavi.jp/news/2016/11/21/374/
shell関数でプログラムを走らせるのって正常に出来るの?
こっちはwin7しか持って無く、これから新しいpcはwin10にしようかと
思ってたとこなんで、教えて
0590デフォルトの名無しさん
2016/12/19(月) 23:05:05.43ID:I1HgbcB80591デフォルトの名無しさん
2016/12/19(月) 23:13:58.13ID:OpihZzPh0592デフォルトの名無しさん
2016/12/19(月) 23:47:31.90ID:Rjs2eiTpウチもだけど。
制限かけまくりで、仕事非効率にしてどうすんのって思うけど。
0593デフォルトの名無しさん
2016/12/20(火) 07:36:16.56ID:w8JR6Zsp0594デフォルトの名無しさん
2016/12/20(火) 08:16:39.42ID:kvfnt0Ie提供してる側は最新が最善でないことを知ってるから...
0595デフォルトの名無しさん
2016/12/20(火) 08:24:05.09ID:LAl9nS1N0596デフォルトの名無しさん
2016/12/20(火) 09:03:25.97ID:JmB9QU54怖い
0597デフォルトの名無しさん
2016/12/20(火) 09:38:01.86ID:+L17/HsE0598デフォルトの名無しさん
2016/12/21(水) 09:11:04.68ID:peeNl1w2夜泣き蕎麦屋が、毎晩夜中に夜食を食べに家に戻る
女房 「夜食くらい自分で蕎麦作って食べればいいじゃない」
そばや「こんなもん!汚くて食えるか」
0599デフォルトの名無しさん
2016/12/21(水) 10:40:03.67ID:bYQ3jOYA一度使い出すと便利すぎて戻れんのだが
0600デフォルトの名無しさん
2016/12/21(水) 10:52:24.77ID:DgPf7ezo0601デフォルトの名無しさん
2016/12/21(水) 11:31:21.40ID:vsqlMPnS0602デフォルトの名無しさん
2016/12/21(水) 12:10:30.73ID:I5jJlidF迷惑って例えば?
0603デフォルトの名無しさん
2016/12/21(水) 19:44:28.31ID:lvWf/WQuコモンライブラリとして扱うと
生産性向上
はうあ快感
0604デフォルトの名無しさん
2016/12/21(水) 20:01:02.97ID:I5jJlidF0605デフォルトの名無しさん
2016/12/21(水) 20:10:06.06ID:wT+HxCxO0606デフォルトの名無しさん
2016/12/21(水) 21:11:11.08ID:IjHRd5MJスタティックおじさんが多いとか
0607デフォルトの名無しさん
2016/12/21(水) 21:38:53.02ID:DwxfAhsu0608デフォルトの名無しさん
2016/12/21(水) 21:41:50.60ID:IjHRd5MJことVBAならそうやな
0609デフォルトの名無しさん
2016/12/21(水) 22:20:14.61ID:vO1nUoqVコンストラクタが使えればもっと綺麗に書けるのになぁという思いが強い。
0610デフォルトの名無しさん
2016/12/21(水) 22:31:59.30ID:MSzLf9x6俺もログはクラスにしてる
> コンストラクタが使えればもっと綺麗に書けるのになぁという思いが強い。
ほんそれ
0611デフォルトの名無しさん
2016/12/21(水) 23:05:52.60ID:R5AsjT350612デフォルトの名無しさん
2016/12/21(水) 23:13:37.01ID:IjHRd5MJ引数なし!
0613デフォルトの名無しさん
2016/12/21(水) 23:17:59.23ID:iSBY4/tK標準モジュール的に使ったら使えたが・・。
0614デフォルトの名無しさん
2016/12/21(水) 23:21:07.13ID:DwxfAhsu文字通り引数がない
だからいろんな値で初期化するなんてことができない
0615デフォルトの名無しさん
2016/12/21(水) 23:21:36.92ID:IjHRd5MJなんだったか忘れたが引数なくて困ったことがあったぞ
0616デフォルトの名無しさん
2016/12/21(水) 23:29:08.86ID:R5AsjT35VBAは.net化しないのかねえ?
0617デフォルトの名無しさん
2016/12/21(水) 23:37:17.48ID:oYfzfznv組み込みで.NETである必要が無い
0618デフォルトの名無しさん
2016/12/21(水) 23:41:45.77ID:R5AsjT35VBAは残していいから
0619デフォルトの名無しさん
2016/12/21(水) 23:47:54.69ID:DwxfAhsu0620デフォルトの名無しさん
2016/12/21(水) 23:50:10.63ID:y5LGh6e40621デフォルトの名無しさん
2016/12/21(水) 23:58:57.65ID:aMg6pWuy>VBAは.net化しないのかねえ?
みたいな奴多いな
君らみたいなプログラマばっかりじゃないんだよ。
あれがドラスティックな変化起こしたら困る人間のほうが圧倒的に多いわ(想像だけどw
0622デフォルトの名無しさん
2016/12/22(木) 00:03:54.04ID:1eZ5r9p60623デフォルトの名無しさん
2016/12/22(木) 00:08:17.90ID:tM2Q7LY3データ加工業務が多い中小企業が軒並み壊滅するな
0624デフォルトの名無しさん
2016/12/22(木) 00:21:24.55ID:AbkOolfU簡素な書き方が出来るあれやこれやが自然と欲しくなってくる。
VBAが〜〜っていうよりはVBEが複数の言語を扱えるようになればいいんだけどね。
0625デフォルトの名無しさん
2016/12/22(木) 00:27:20.52ID:blvnx7IgVBEはエディタでしょ
テキストエディタで書いたのをインポートしても動くよ
コーディングするだけならテキストエディタでできる
0626デフォルトの名無しさん
2016/12/22(木) 04:15:45.61ID:Ez/LeE21なんか本末転倒のような気がする
0627デフォルトの名無しさん
2016/12/22(木) 04:27:16.92ID:0Mrlmz5Y0628デフォルトの名無しさん
2016/12/22(木) 06:13:53.88ID:mVBC6l070629デフォルトの名無しさん
2016/12/22(木) 11:53:30.86ID:743PRFN5何もOfficeの上で動かす必要ないし
0630デフォルトの名無しさん
2016/12/22(木) 12:02:40.24ID:uTQf0x1y0631デフォルトの名無しさん
2016/12/22(木) 12:55:28.31ID:YVr1LIe6C# から COM 使うのが異常に面倒だから
System.Runtime.InteropServices.Marsha l.ReleaseComObject(System.Object) をちゃんと隠蔽してくれよ...
なのでずっと vbs 使ってたけど最近 PowerShell に移行した
0632デフォルトの名無しさん
2016/12/22(木) 14:28:19.55ID:l2ODmaOL既存の機能でできそうにもなく、VBAではどうなのか調べてみても見つからなかったのでこちらで質問しました。
0633デフォルトの名無しさん
2016/12/22(木) 14:35:16.47ID:u2SDU6lKAddCommentメソッド
0634デフォルトの名無しさん
2016/12/22(木) 22:00:01.57ID:ijyoU16T頼まんで自分で作れるからいいけど、既存の社内ツールとか使うのすごいストレス
0635デフォルトの名無しさん
2016/12/22(木) 22:01:34.48ID:IkDwdq0/(Name).RefersToRangeを呼び出すと
実行時エラーになるんだけど、
セル範囲の個数等に制限があるかどうか知っている人います?
0636デフォルトの名無しさん
2016/12/22(木) 22:17:56.05ID:AbkOolfUインターフェースってフォームとかのGUIの事? それ現場と切り離してない?
実際に運用するヤツの隣で作業させれば嫌でも分かりやすい形を目指すようになるぞ。
なんせ使い勝手が悪いと「これ分からないんですけど」って質問を使うたびにされる羽目になるからな!(体験談
>>635
参照範囲が#REF!とかになってない?
0637デフォルトの名無しさん
2016/12/22(木) 22:25:00.49ID:IkDwdq0/参照範囲に#REF!はないです。
ただ、離れた複数のセルを指定しています。
(例: A1,B2,D2:E4,....)
Rangeの引数に制限があるので、その影響かなと思っていますが、
参考資料がなく断定できないのです。
0638デフォルトの名無しさん
2016/12/22(木) 23:16:07.66ID:PBpENT/R全セルに重複がないことを確認したいんだけど
Dictionaryに突っ込んでチェックするしかないかな?
出来ればワークシート関数でできるとありがたいのだが
0639デフォルトの名無しさん
2016/12/22(木) 23:19:27.23ID:AbkOolfUSub test()
Dim r As Range
Set r = Cells(1, 1)
For i& = 2 To 1024 Step 2
Set r = Union(r, Cells(i, 1))
r.Name = "test"
Debug.Print r.Count
Debug.Print ThisWorkbook.Names("test").RefersTo
Debug.Print ThisWorkbook.Names("test").RefersToRange.Address
Next
End Sub
で試してみたら参照セルが18を超えるとダメっぽいね。
0640デフォルトの名無しさん
2016/12/22(木) 23:42:27.19ID:1gi9RDSsCSV→SED|uniqなら一瞬で結果が出せるんだけどなあ
0641デフォルトの名無しさん
2016/12/23(金) 00:20:23.38ID:Lyl7nXDNワークシート関数とか読み難くなるだけだろ
マクロでサクっと書いてシートは原文ママが理想
いっそマクロはvbsで動くように書いてシートと分離しておくとメンテもし易い
0642デフォルトの名無しさん
2016/12/23(金) 00:25:49.34ID:vg49py8A隣のシートの同番地でCountifとか?
0643デフォルトの名無しさん
2016/12/23(金) 00:39:39.44ID:KgePRwKX重複の有無だけならエクセルの機能のやつでバリアントの配列にいれてゴニョゴニョできそうな気がするけど試してない
0644デフォルトの名無しさん
2016/12/23(金) 00:48:22.47ID:qpIamhkn条件付き書式の「重複する値」をマクロで記録して
使い回すじゃダメなの
0645デフォルトの名無しさん
2016/12/23(金) 00:59:18.52ID:zNUIuAUA1列にしてからソートして隣との差がゼロにならないことを確認するくらいかなあ...
0646638
2016/12/23(金) 01:16:59.24ID:sWtCGeNB今回は>>640さん、>>645さんの案でいけそうです。
sedで縦にできるのかな
0647デフォルトの名無しさん
2016/12/23(金) 04:37:08.98ID:jiSEHcxr区切り文字は、データに絶対に含まれない、タブ文字などの方が、誤動作しなくていいかも
0648デフォルトの名無しさん
2016/12/23(金) 05:47:25.72ID:XuyY8bd+重複の削除をマクロの記録する
0649デフォルトの名無しさん
2016/12/23(金) 05:50:25.46ID:XuyY8bd+worksheetfunction.transpose()で出来るのでは?
0650デフォルトの名無しさん
2016/12/23(金) 10:36:53.32ID:CrN1xF7/アクセスvbaのレコードセット的なクラスを作ってみたけど
普通のモジュールで対応出来るような気がするし
0651デフォルトの名無しさん
2016/12/23(金) 11:38:09.00ID:42pskRy9気持ちはわかる
そして対応出来てしまう。
両方の経験を積むと
じわじわくる
dbに関する処理をクラスに
まとめて便利に使ってる。
0652デフォルトの名無しさん
2016/12/23(金) 11:38:39.76ID:UkyQFfHwオブジェクトが自身の状態を持つ
オブジェクトを複数使うシチュエーションがある
両方満たしていたらクラス化のメリットは大いに感じられるはずだと思う。
そうでなければあまりメリットがないこともあるかも。
0653デフォルトの名無しさん
2016/12/23(金) 11:39:20.57ID:LpkEeXbt>>615
う〜ん、やっぱわからん。
標準モジュールからクラスモジュールに値を渡せればいいんでしょ?
0654デフォルトの名無しさん
2016/12/23(金) 11:42:16.93ID:LpkEeXbt俺もよくわからん。
標準モジュール側が楽になったのはわかる。
でもクラスモジュール側が面倒くさい。
0655デフォルトの名無しさん
2016/12/23(金) 11:51:42.70ID:UkyQFfHwset Obj = New myClass(1)
などといった書き方ができない、っていう意味でしょ
set Obj = New myClass
Obj.pineApplePen = 1
なんて書くのがイヤだと
0656デフォルトの名無しさん
2016/12/23(金) 12:13:30.92ID:CrN1xF7/他のvbaでの共有できたりして
シートのコピーとかではすごい捗るのは確かだが
使いまくるとクラスがモジュールが増えてくのが難点だなあ
後は会社じゃ俺以外クラスがわからんらしい
0657デフォルトの名無しさん
2016/12/23(金) 12:29:42.91ID:KLz8a+9aクラスにキレイにまとめとけば使い回しが楽
0658デフォルトの名無しさん
2016/12/23(金) 13:03:28.04ID:roeigQorNewするときにクラス初期化するでしょ
そんときに渡したい値があったりするでしょ
たまにあるんだよ
具体例は使えないから忘れたよw
0659デフォルトの名無しさん
2016/12/23(金) 13:05:02.68ID:kPjVlfxv同じようなerrorがでて、おそらくRefersToの文字長が制限なんじゃないの
正確な制限は255より短いようだけど内部で何かしらもっているからじゃないの
っていうのが以下ページでQAされていました。
Excel VBA: Named range can't be assigned to range object
MSDNとかに説明があれば判定できるのになあ。
0660デフォルトの名無しさん
2016/12/23(金) 13:08:18.39ID:roeigQor大抵のことは標準モジュールでできるんだけど、手続き的に書くとちょっとした変更がダルいし
0661デフォルトの名無しさん
2016/12/23(金) 13:13:29.89ID:XuyY8bd+どうしても渡したいならシートのセル使えばよくない?
0662デフォルトの名無しさん
2016/12/23(金) 13:19:59.09ID:roeigQor気持ち悪い感じがね
0663デフォルトの名無しさん
2016/12/23(金) 13:20:33.35ID:CrN1xF7/0664デフォルトの名無しさん
2016/12/23(金) 13:24:35.34ID:roeigQor三ヶ所くらい使えるサイトあるな
書籍はほぼないから、オブジェクト指向関連の本を読んでVBAに落とすしかない
ついでに他言語勉強するのが一番いいよね
0665デフォルトの名無しさん
2016/12/23(金) 13:26:28.32ID:zNUIuAUAそれだと再利用性は完全に諦めだからクラスにした意義がほぼ失われる
0666デフォルトの名無しさん
2016/12/23(金) 13:27:02.38ID:roeigQorむしろこれか
0667デフォルトの名無しさん
2016/12/23(金) 13:34:30.57ID:CrN1xF7/0668デフォルトの名無しさん
2016/12/23(金) 13:42:25.90ID:i2qAMoBQ一定以上の大きさにならないと恩恵が少ないってのはある。
0669デフォルトの名無しさん
2016/12/23(金) 13:57:31.65ID:yNZGCB3R0670デフォルトの名無しさん
2016/12/23(金) 14:14:53.83ID:o3BktLehそのサイトを教えてください
0671デフォルトの名無しさん
2016/12/23(金) 14:15:55.59ID:XuyY8bd+受け渡し用シート名を固定すればいい
クラスを使う側は毎回変わるわけだからクラスの再利用の点では同じ
0672デフォルトの名無しさん
2016/12/23(金) 14:17:39.74ID:XuyY8bd+エクセルしか使えない人も居たりする
他の言語だとインストールしたり設定変えたりしないといけない事がある
0673デフォルトの名無しさん
2016/12/23(金) 14:18:02.69ID:7Lwgocmxそういうのは別スレ立ててtそこでやれっつーの
0674デフォルトの名無しさん
2016/12/23(金) 14:31:56.26ID:roeigQorexcel vba オブジェクト指向でググれば上の方に出てくるよ
0675デフォルトの名無しさん
2016/12/23(金) 14:42:03.46ID:zNUIuAUAExcel VBAの守備範囲内だからしょうがない
0676デフォルトの名無しさん
2016/12/23(金) 14:44:03.52ID:XuyY8bd+とりあえずデフォルト値にしておいて
後でプロパティをセットすれば良いんじゃね
0677デフォルトの名無しさん
2016/12/23(金) 15:06:22.43ID:CrN1xF7/情報保持とかにも向いてるような気がする
クラスの方が処理が速いとか無いよね?
0678デフォルトの名無しさん
2016/12/23(金) 15:09:12.18ID:zNUIuAUAProperty Setを用意するといつでも変わってしまう。
コンストラクタで最初にキメたらその後不変、ってよい性質。
0679デフォルトの名無しさん
2016/12/23(金) 15:30:18.60ID:tydkaaKwプロパティを外部から書き込めるのは...
って言うのもあるからそんなことするなら Setup( ) とかのメソッド作って New したら必ず呼んでね
ってした方がいい
06801
2016/12/23(金) 15:59:54.98ID:b81zndJj5 1.00 1.09 1.14 1.17 1.210 1.219 1.221 1.222 1.235 ・・・・
6 1.10 1.11 1.12 1.15 1.17 1.189 1.191 1.199 1.208 ・・・・
7 1.13 1.14 1.15 1.17 1.171 1.179 1.180 1.185 1.191 ・・・・
8 1.19 1.19 1.193 1.2 1.210 1.217 1.240 1.242 1.250 ・・・・
9 1.26 1.27 1.273 1.28 1.283 1.294 1.311 1.329 1.303 ・・・・
A B C D E F G H I
31 1.00 0.98 0.99 1.01 1.012 1.019 1.021 1.022 1.021 ・・・・
32 1.10 1.11 1.10 1.12 1.012 0.989 1.020 1.020 0.998 ・・・・
33 1.13 1.31 1.00 1.19 1.22 1.019 1.020 1.030 1.998 ・・・・
34 1.19 1.01 1.30 1.29 1.210 1.219 1.040 1.122 1.666 ・・・・
35 1.26 1.81 1.17 1.32 1.001 0.994 1.111 1.029 0.933 ・・・・
A B C D E F G H I
71 1.00 0.78 0.79 0.80 0.81 0.819 0.821 0.812 0.811 ・・・・
72 1.10 0.61 0.62 0.63 0.64 0.65 0.66 0.67 0.69 ・・・・
73 1.13 0.45 0.48 0.51 0.52 0.53 0.531 0.535 0.567 ・・・・
74 1.19 0.25 0.26 0.21 0.29 0.23 0.271 0.245 0.217 ・・・・
75 1.26 0.11 0.12 0.11 0.19 0.13 0.21 0.141 0.122 ・・・・
sheet2にある上記のような3種類の表内から条件に合う数字をsheet1に抽出したいと思っています。
0681デフォルトの名無しさん
2016/12/23(金) 16:05:41.68ID:8HH7yn5vえっと ちょっと聞きたいが
EXCEL総合スレにも同じような趣旨の書込みがあるけど 君なの?
もしそうなら どっちか統一した方がよくねか?
あとここは VBAスレだから VBAでやりたいって事よね?
06821
2016/12/23(金) 16:10:57.40ID:b81zndJjsheet1の特定のセルで「1.19」という値が弾き出されて、その隣のセルに「1.2」という数字(≒条件)が入力されていたとした場合
�@sheet2の真ん中の表のA列から「1.19」に完全合致する行34を特定
�Asheet2の真ん中の表の行34から「1.2」以上の数字になっている列C、D、E、F、I…を特定
�Bsheet2の一番上の表のA列から「1.19」に完全合致する行8を特定
�Csheet2の一番上の表の行8から�Aで導き出した「C、D、E、F、I…」に該当したセルの数字をsheet1に引用(横方向にズラーッと)
�Dsheet2の一番下の表のA列から「1.19」に完全合致する行74を特定
�Esheet2の一番下の表の行74から�Aで導き出した「C、D、E、F、I…」に該当したセルの数字をsheet1に引用(横方向にズラーッと)
こういう処理を行うマクロを組みたいのですがどうしていいのか見当もつきません。
どなたか助けてください。
0683デフォルトの名無しさん
2016/12/23(金) 16:12:48.84ID:b81zndJjそうです、VBAのマクロでやったほうがいいという意見を聞きまして。
0684デフォルトの名無しさん
2016/12/23(金) 16:40:20.88ID:8HH7yn5vまずは ご自分で作って 分んない所 質問すればいいと思うぞ
1) A列を FORループで1.19が出てくるまで探す
2) ↑で1.19が出て来た行を横に 同様にFORループで1.2以上の数値が出るまで探す
これでいける
ちなみに ループ回すときに必要となる 最終行番号と最終列番号は
最終行番号
ENDROW = Cells(Rows.Count,"A").End(xlUp).Row
最終列番号
ENDCOL = Cells(35, Columns.Count).End(xlToLeft).Column
とかで取得できる
がんばって下さい
0685デフォルトの名無しさん
2016/12/23(金) 17:13:16.65ID:roeigQorとりあえずfor文ごり押しでどうにでもなるんだから
配列使うかworksheetfunctionでやるのが早いだろうけどね
0686デフォルトの名無しさん
2016/12/23(金) 17:19:58.80ID:rD6U2I4j助けてやれば?w
0687デフォルトの名無しさん
2016/12/23(金) 17:23:35.19ID:roeigQorvbaスレでforとかifの説明するのってなんかちがくね?
そのくらい自分で勉強してほしくね?
0688デフォルトの名無しさん
2016/12/23(金) 17:36:46.93ID:XuyY8bd+マクロの記録で
1.19を探す
その行を選択する
そこまで記録してみる
あとそのマクロをVBEで編集して動かして結果を確かめる
これを繰り返す
0689デフォルトの名無しさん
2016/12/23(金) 19:19:54.82ID:fQSmgloyVB6と記憶がごっちやになってる
0690デフォルトの名無しさん
2016/12/23(金) 19:41:26.86ID:lwtV9Zgbインターフェイスは使える
0691デフォルトの名無しさん
2016/12/23(金) 19:48:16.47ID:fQSmgloy0692デフォルトの名無しさん
2016/12/23(金) 21:55:13.08ID:i2qAMoBQインテリセンス効かせる程度の意味合いしかないんだよな。
同じメソッド名を持つクラスなんてそんなに沢山作る状況もないだろうし。
0693デフォルトの名無しさん
2016/12/23(金) 22:08:19.03ID:PmMZNVGdハリウッドの原則を実現するためにメソッド参照かこれが必要になるんだが
0694デフォルトの名無しさん
2016/12/23(金) 22:22:57.69ID:lwtV9Zgbめちゃめちゃ効率上がるじゃん
0695デフォルトの名無しさん
2016/12/23(金) 22:30:28.10ID:0G02nH7W難点があるとすればマルチスレッドがVBA単体では使えないこと、
VBEでフォルダ構成のように配置出来ないし1クラス1モジュールになるので余りクラスを作ると管理し辛くなること、
継承はインターフェースである程度カバー出来るが、例えばフォームやシート継承してそのプロパティを追加したい場合は
インターフェースで行うには限界があるのでその辺を考慮して設計しなければならないこと、
静的変数が.Netとは少し意味が違うので、シングルトン的な使い方をし辛い。
くらいか。VariantやObjectを使うのは暗黙の型変換や型が緩いことの危険性をよく理解してから使った方がいいかな。
0696デフォルトの名無しさん
2016/12/23(金) 22:47:26.21ID:PmMZNVGdインターフェースの実装なんだけどこれも分かり難いかな
0697デフォルトの名無しさん
2016/12/23(金) 23:04:49.57ID:i2qAMoBQわざわざ継承しなくてもClass単体でインテリセンス効くし、
インテリセンス効かなくてもメソッドにアクセスする事は出来るし、
類似クラスのどれかを使ってインテリセンス効かせながら書いてからObject型とかに直しても動作するわけで、
1.同じメソッド名を持ちつつ別の挙動を行うクラスを
2.同じ引数として受け取って処理するプロシージャを書く際に
3.インテリセンス効かせておきたい
というとんでもなく局所的な使い方の時に、労力に見合わないほど些細な利便性を獲得する際にしか利用出来ない
>>696
そんなレベルの低い話はしてないと思う。
0698デフォルトの名無しさん
2016/12/23(金) 23:09:49.44ID:PmMZNVGd0699デフォルトの名無しさん
2016/12/23(金) 23:22:35.12ID:PmMZNVGdデフォルトプロパティを使った疑似コンストラクタ引数のアイデアは俊逸だわ
最後のオチも含めて
0700デフォルトの名無しさん
2016/12/23(金) 23:44:25.59ID:i2qAMoBQインターフェースの基礎知識をドヤ顔で語る馬鹿でないのなら、
VBAでフレームワーク自作して運用しろって言っている馬鹿か?
0701デフォルトの名無しさん
2016/12/23(金) 23:51:55.39ID:tydkaaKwやろうとは思わないけどこれは思い付かなかったな
0702デフォルトの名無しさん
2016/12/24(土) 00:09:11.49ID:hHONY+Ddどこが原因でしょうか
0703デフォルトの名無しさん
2016/12/24(土) 00:51:46.97ID:VKHHalJR0704デフォルトの名無しさん
2016/12/24(土) 01:20:16.05ID:ixcSg5vjすまん、継承云々の話ね
デモサポートしてくれた方がいいよね
0705デフォルトの名無しさん
2016/12/24(土) 01:30:36.20ID:MsPpHedf俺はObject型はそうせざるを得ない時のみ使ってるかな。
確かにインテリセンスの問題もあるんだけど、
例えばObject型に入れたインスタンスに無いメソッドやプロパティを使用したとして、
エラーは実行時にならないと起きないから。
もしそれがインターフェースにインスタンスを入れたものならコード入力の時点で発覚するので
潜伏したバグとならないで済む。
ここに今いる人達は、俺はレベルが低いとは思わないよ。
Object指向言語やってる訳でもないのにここまでポリモーフィズムのことを理解しているのは逆に凄いと思う。
0706デフォルトの名無しさん
2016/12/24(土) 01:50:56.24ID:MsPpHedfイベントハンドラはここで今言っているインターフェースより
どちらかと言えば.Netで言うDelegateのそれだね。
まぁ型合わせはしなければいけないのは同じだけど、
インターフェースはクラスのインスタンスを格納するもの。
イベントハンドラはコールバックでメソッドを呼び出すもの。
クラスを扱うものか、メソッドを扱うものかの違いがある。
VBAで言うならAPIでコールバックを行なったりCall By Nameを使ったりするのに近い。
0707デフォルトの名無しさん
2016/12/24(土) 01:51:54.26ID:kcDzEr5V0708デフォルトの名無しさん
2016/12/24(土) 03:20:09.21ID:1oQDwUOkExcelのバージョンは、255列しか使えない97じゃなくて、
16384列まで使える2013なんだけど。
[かつしん.csv]
ColNameHeader=True
Format=CSVDelimited
Col1=もう Char Width 255
Col2=パンツは Char Width 255
Col3=はかない Char Width 255
・
・
・
Col255=方が Char Width 255 ←ここまではOK
Col256=いいかな Char Width 255 ←これ以上はODBCエラー
マジうんこ。
0709デフォルトの名無しさん
2016/12/24(土) 10:31:13.46ID:YUUdnwHC直に代入じゃなくてvariant型の配列にしてペタッとしてもダメ?
0710デフォルトの名無しさん
2016/12/24(土) 12:00:09.52ID:jvMGVJFm0711デフォルトの名無しさん
2016/12/24(土) 13:31:55.96ID:1oQDwUOkテキスト取り込みとか、ファイルオープンして配列に入れるとか、
他に方法はあるんだけど、
CSVを直接SQLで処理したいんだよね。
処理速度的に。
0712デフォルトの名無しさん
2016/12/24(土) 13:39:56.93ID:vL0KvqDu何でその方法を選んだ?
他の実現方法は検討したのかな
アクセスでも良いだろうし
0713デフォルトの名無しさん
2016/12/24(土) 13:48:03.95ID:OpOi9D7n列を分割して取り込むことでなんとかなるけど。
0714デフォルトの名無しさん
2016/12/24(土) 13:54:24.44ID:vL0KvqDuSQL使うんだろう
あとiniファイルだからダメなんじゃね?
0715デフォルトの名無しさん
2016/12/24(土) 15:54:42.90ID:yMvVW4sX>Excelのバージョンは、255列しか使えない97じゃなくて、
ODBCドライバが対応してないだけでExcel関係ないよ
256列は設計見直した方がいい
0716デフォルトの名無しさん
2016/12/24(土) 19:27:36.48ID:1oQDwUOk>>714
Excelしか使えない環境だから。
後、iniファイルがないと、勝手に型変換されて、
001が1になったりするんだよね。
あらかじめ、シートを文字列型にしておいても駄目だった。
>>715
そのCSVが、客先のシステムのやつなんだよ。
最初の10数列と、最後の300列あたりにデータが入っていて、
間は空という、嫌がらせのようなファイル。
0717デフォルトの名無しさん
2016/12/24(土) 19:43:57.41ID:OpOi9D7nFSOとかで空白列抜かして読み込んで、シートをADODBで繋げばSQL使える。
0718デフォルトの名無しさん
2016/12/24(土) 19:53:32.02ID:PRjVXR46いいんかそれで?よく考えろよ
0719デフォルトの名無しさん
2016/12/24(土) 19:55:26.41ID:vL0KvqDu最初の8行くらいをみて自動的に型を推定するはず
全部テキストとして読み込むように接続時のオプション指定があったと思うけど
0720デフォルトの名無しさん
2016/12/24(土) 21:18:21.67ID:vK4MP9IZ0721デフォルトの名無しさん
2016/12/24(土) 21:20:14.56ID:SFMtO5ueIf 彼女 = True Then Exit Do
If 彼女 = False And 年齢 > 20 Then GoTo 風俗
年齢 = 年齢 + 1
童貞歴 = 年齢
Loop
0722デフォルトの名無しさん
2016/12/24(土) 21:37:28.54ID:QxCgnJZA彼女(俺)とすべきでは?
0723デフォルトの名無しさん
2016/12/24(土) 22:17:06.48ID:nbBc4uogあるプロシージャでErr.raiseでエラーメッセージ等を設定して、ON ERROR GoTo でキャッチして、さらにその後またErr.raiseで呼び出し元のプロシージャでもキャッチしたいんですけど、出来ますか?
何か注意点はありますか?
0724デフォルトの名無しさん
2016/12/24(土) 22:39:06.51ID:NogtYgyxんー、やったことないけどErrorObject型の変数に入れることはできるんじゃない?
仮にそれが無理でもDescriptionとかNumberとかを個別に取得してCollectionに突っ込むとかで解決できそう
0725デフォルトの名無しさん
2016/12/24(土) 22:44:40.35ID:rbuG+j7Hやりたい事 こうゆう事?
Sub Test1()
On Error GoTo Err
Call Test2
Exit Sub
Err:
Debug.Print "[Test1]"; Err.Number; Err.Description
End Sub
Sub Test2()
On Error GoTo Err
Err.Raise "999", , "えらー だよーーん"
Exit Sub
Err:
Debug.Print "[Test2]"; Err.Number; Err.Description
Err.Raise Err.Number, , Err.Description
End Sub
0726デフォルトの名無しさん
2016/12/24(土) 22:45:48.53ID:yMvVW4sXDim tmp As Integer
On Error Goto Error_Handler
Error_Handler:
If Err.Number<>0 Then
tmp = Err.Number
Err.Clear
Err.Raise tmp
End if
みたいな感じにすれば親に再スローはできる
エラーがユーザー定義の場合は各プロパティに設定が必要
0727デフォルトの名無しさん
2016/12/25(日) 00:15:05.61ID:zIj5btKpまさにこういったことです。ありがとうございます。
Err.raise Err.number,,Err.Description
ができるかどうかが知りたかったんです。
Err.raiseするときに初期化されてしまうのでは…とか思っていました。
0728デフォルトの名無しさん
2016/12/25(日) 00:28:26.16ID:haayO3b2functionの戻り値variantにして戻り値として返しちゃってもいいような
0729デフォルトの名無しさん
2016/12/25(日) 01:01:32.97ID:zIj5btKpなるほど。ありがとうございます。
0730デフォルトの名無しさん
2016/12/26(月) 11:55:16.84ID:jBQYwGOJ"=COUNTIF($B$2:$K$12,$A$1)=1"
これはうまく動くのですが、範囲($B$2:$K$12)を次のように変数指定しようとするとエラーが出ます
Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
"=COUNTIF(Range(Cells(r1, c1), Cells(r2, c2)),$A$1)=1"
どうしたら良いのでしょうか? 👀
Rock54: Caution(BBR-MD5:0be15ced7fbdb9fdb4d0ce1929c1b82f)
0731デフォルトの名無しさん
2016/12/26(月) 12:08:04.68ID:/iMD3zusRangeオブジェクトはVBAでしか扱えないから
ワークシート関数に渡したいならAddressで文字列に変換しないと
"=COUNTIF(" & Range(Cells(r1, c1), Cells(r2, c2)).Address & ",$A$1)=1"
0732デフォルトの名無しさん
2016/12/26(月) 12:21:22.81ID:jBQYwGOJ初心者ですが、また一つ勉強になりました
ありがとうございましたm(_ _)m
0733デフォルトの名無しさん
2016/12/26(月) 15:37:20.09ID:M7JLaQhjprivate type T
lng as long
bln as boolean
end type
public property get X as long
X = fnc.lng
end property
public property get Y as boolean
Y = fnc.bln
end type
private function fnc as T
fnc.lng = 100
fnc.bln = True
end function
みたいに、クラスないで構造体で分岐みたいにするのって問題ないよね?
マナー的におかしいとかないよね
0734デフォルトの名無しさん
2016/12/26(月) 15:53:42.62ID:diLlvsXi分岐ってどこにあるの?
0735デフォルトの名無しさん
2016/12/26(月) 16:24:39.70ID:l7AoLD6fどんなマナー?
そうする必要があるなら それで いいんじゃね? と思うけどな
PS
タイプミスあるぞーwww
0736デフォルトの名無しさん
2016/12/26(月) 16:32:04.19ID:ZlGyyZtR分岐って言い方まずかったな
語彙がなくてすまん
>>735
おけ、ありがとう
タイプミスごめんなさい
0737デフォルトの名無しさん
2016/12/26(月) 17:40:10.59ID:at2BWtcV開いた先のwebページ内のテーブルからデータを取得するマクロ組みたいんですけど、
何か参考になるサイトとか教えてもらえませんか。
特定のワードがある時にだけリンク先にアクセスする方法が思いつきません。
0738737
2016/12/26(月) 17:44:08.69ID:at2BWtcV最初に開くサイトのテーブルは、全てリンクが貼られていて、
特定のワードのリンク先のみ開いてデータを取得したいのです。
全て開くと冗長になってしまうので。
0739デフォルトの名無しさん
2016/12/26(月) 18:17:13.35ID:l7AoLD6f最初に開くサイトをIEで開きたくないって事?
APIのURLDownloadToFile か MSXML2.XMLHTTP とかとかで
HTMLソース取得して
MSHTML.HTMLDocumentにパースしてソース解析するしかないと思う
(テキスト解析でもいいけど)
0740デフォルトの名無しさん
2016/12/26(月) 18:20:47.75ID:diLlvsXi0741737
2016/12/26(月) 19:09:34.65ID:5dC605Ekすいません
最初のサイトも開いて構いません
ただリンク先が多すぎるので、ワードでフィルターかけてからリンク先を開きたいんです
0742デフォルトの名無しさん
2016/12/26(月) 19:18:49.47ID:diLlvsXiだからテキスト中のhrefタグの中身をフィルタリングすればいいんじゃないの?
0743デフォルトの名無しさん
2016/12/26(月) 19:31:01.37ID:l7AoLD6fVBAでIE操作して情報を取得するやり方が 根本から分かってないのか?
"VBA IEオブジェクト"でググってみれば?
0744デフォルトの名無しさん
2016/12/26(月) 19:51:29.88ID:ZlGyyZtR0745デフォルトの名無しさん
2016/12/27(火) 14:03:54.63ID:1My9BP7WJavaScriptで動的に生成されるページだから手が出せないとか
0746デフォルトの名無しさん
2016/12/27(火) 14:06:16.14ID:KwCXwFxZ0747737
2016/12/27(火) 15:14:06.72ID:FDOoKapWURLを指定して、サイトを開くのは出来ましたが、まだテーブル内部にアクセスできません。
URLは固定なのですが、アクセスする日時でHTMLは自動生成され内容が変わります。
ソースにはdoctype htmlとなっているので、問題はありませんよね?
初めてのマクロなんですが、思ったより難しいです。
もう少し頑張ってみます。
0748デフォルトの名無しさん
2016/12/27(火) 19:25:45.27ID:zArFxoGGIEでソース開いて(表示→ソース だったかな)
目的の情報はある? 動的生成だったらちと難易度高いかもよ
<A HREF="?????" > 目的のワード</A>
とかなら簡単になんだけど
0749デフォルトの名無しさん
2016/12/28(水) 00:39:42.11ID:FT5Og24Dまず、特定したい文言がどのタグ要素に含まれてるか教えてよ
それが固定なのか、動的なのかも
0750デフォルトの名無しさん
2016/12/28(水) 01:56:14.56ID:jEL1sH6YいいからさっさとURL貼れ
どうせギャンブルか投資かアダルトだろ?
0751737
2016/12/28(水) 06:37:50.55ID:mLqD6fX4リンクが貼られてる列は見つけました。
ただテーブル要素を取れないんです。何か根本的に間違っていると思うのですが。
タグで行をコレクションして、中のtdを取り出す方法であってるのでしょうか。
>>749
同じサイズのテーブルが複数あって、取りたい情報はいくつかの列と、その中の1つがハイパーリンクです。
テーブルの順番は動的ですが、一度生成されたテーブルは固定で、新しいテーブルが順次最上段に追加される仕様です。
>>750
すいません、社内のサーバーなんです。
事務員のコピペ作業を簡略化する目的です。
機密関連の文字列を消して、ここにページのソースを貼り付けたり、テキストファイルを貼らせて頂いても良いのでしょうか?
0752デフォルトの名無しさん
2016/12/28(水) 08:20:59.49ID:TpvJKrIKあとフォームだったりとか
目的の文字列があるエレメント取得してdocument.innertext(うろ覚え)ってすればいいはずなんだが
0753デフォルトの名無しさん
2016/12/28(水) 16:10:15.94ID:zWNfYHVu>ここにページのソースを貼り付けたり、テキストファイルを貼らせて頂いても良いのでしょうか?
君の 組織的に 問題ない ならいいよ
ただ htmlソースをそのまま貼っても 正しく貼れないと思うから
どっかにテキストファイルをアップロードして アップロードurlを書いてくれるかな
0754デフォルトの名無しさん
2016/12/28(水) 16:53:56.39ID:NMOlmuolhttp://www.vba-ie.net/sp/element/rowscells.html
うまく行かなければ、とりあえずtdの中身をfor文で全部調べていって、if文で特定の文字列と一致したら前後にあるリンクアドレスを抽出とか?これならあんまり考える必要もないかも?
0755デフォルトの名無しさん
2016/12/28(水) 22:22:15.29ID:CV23GzcW>すいません、社内のサーバーなんです。
あー、サーバーから直接取れば速いのに、
直接取る権限無くて困ってる系ね。
0756デフォルトの名無しさん
2016/12/28(水) 23:59:18.91ID:q3/TSLT5アタッチするみたいなことってできないのかな?
.textContent = 〜 ではダメだった。
0757デフォルトの名無しさん
2016/12/29(木) 00:13:20.76ID:vsV3i/xBテキスト(HTMLソース) VBAで読み込んでString変数へ入れておいて
writeメソッドで HTMLDocumentへ書き込むんじゃダメなのかい?
直接ファイルからなら createDocumentFromUrl だと思うが・・・
0758デフォルトの名無しさん
2016/12/29(木) 00:25:28.44ID:NP/cw+55Writeメソッド....
コンパイルエラー:
関数またはインターフェイスが予約されているか、またはVisual Basicでサポートされていないオートメーションタイプが関数で使用されています。
って出てきちゃう
0759デフォルトの名無しさん
2016/12/29(木) 00:36:18.32ID:vsV3i/xBMicrosoft HTML Object Libraryの参照設定が必要してたりするよね
最近使ってなかったから忘れてたwww
インテリセンス使えんけど こうしてみ?
Dim HTMLDoc As Object
Set HTMLDoc = New MSHTML.HTMLDocument
0761デフォルトの名無しさん
2016/12/29(木) 00:58:31.21ID:/tkccTc/DOMは理解してるのか?
0762デフォルトの名無しさん
2016/12/29(木) 07:11:42.77ID:NP/cw+55Writeメソッドのところでダメになる(>>758のメッセージ)
0763759
2016/12/29(木) 14:38:28.82ID:vsV3i/xBダ・カ・ラ
HTMLDocument型で定義したオブジェクト変数で writeするとそうなるから
Objerct型で定義しる
Microsoft HTML Object Libraryの参照設定して↓のサンプル動かしてもダメなのかい?
(俺ん所の EXCEL2016 じゃ OK よん)
Sub TEST()
Dim HTMLDoc As Object
Set HTMLDoc = New MSHTML.HTMLDocument
With HTMLDoc
.Open
.write "<HTML><BODY><SPAN>TEST</SPAN></BODY></HTML>"
.Close
End With
Debug.Print HTMLDoc.getElementsByTagName("SPAN")(0).outerHTML
End Sub
なお
インテリセンス使えない問題は 工夫次第で局所化できると思う
・Object型で書き込んで HTMLDocument型へキャストして使う
or
・書き込む時だけObject型へキャスト
0764737
2016/12/29(木) 15:37:09.72ID:Wdzb25Hnいえいえ、勉強中と言うのもおこがましい完全素人です。
上でアドバイス頂いたWebの情報見ながら頑張ります。
ここの皆様めっちゃ優しいので大変助かってます。
また壁にぶつかったらご相談させて頂きます。
0765デフォルトの名無しさん
2016/12/29(木) 16:14:24.72ID:7Vmjozq3実際の型ではダメでベースクラスの型では呼び出せるメソッド???
0766デフォルトの名無しさん
2016/12/29(木) 16:20:24.98ID:vsV3i/xB詳しい事は MSに聞かんとわからんが
HTML Object Library内部定義と VBAの内部で バッティングしてるんだと思う
まあ これ VBA専用では ないからね
>>763 のテストコードを
Dim HTMLDoc As Object
を
Dim HTMLDoc As MSHTML.HTMLDocument
にしたら
>>758 になる
0767デフォルトの名無しさん
2016/12/29(木) 20:58:48.56ID:NP/cw+55をををw!!!!!
As Object にしたらできました!!
しかも CreateObject("htmlfile") にしたら参照設定も不要に!
>>759の"As Object"は見過ごしてました。
非常に不思議です!(>>765と同じ疑問)
0768デフォルトの名無しさん
2016/12/31(土) 02:46:56.18ID:lht2/6/xある規則に従って,セルの場所を返すFunctionを作って,返されたセルにデータを
書き込む,ということをしたいのですがFunctionの戻り値にセルの位置を返すやり方
としてはどういう方法がやりやすいのでしょうか?
ご教授お願いいたします.
例:
'セルの場所を返すFunction
Function foo(返す場所を決めるための値)
セルの場所を決める演算
foo = セルの場所
End Function
'セルに書き込むFunction
Function bar()
セルの場所 = foo(...)
セルの場所にデータを書き込む
End Function
0769デフォルトの名無しさん
2016/12/31(土) 03:59:33.60ID:CRVQvMfq人に聞くまでもなく
"自分にとって やりやすい方法"
で作ればいいかと
(やりやすい/やりずらい の判断基準は 人によって違うからね)
0770デフォルトの名無しさん
2016/12/31(土) 07:27:31.14ID:VWit1SHs今動いてるのならそれでいいと思う
ついでにここで聞くようなレベルは教授ではなく教示
0771デフォルトの名無しさん
2016/12/31(土) 08:20:44.88ID:RP5GqFRc環境が手元にないので記憶に頼ってるから細かいミスは見逃してちょ
Function Foo(S As Worksheet) As Range
Set Foo = S.Cells(1, 1)
End Function
Sub Bar
Dim R As Range
Set R = Foo(ActiveWorksheet)
R.Value = "Test"
End Sub
Foo(ActiveWorksheet).Value = "Test"
ってできたかどうかは覚えてない
>>769-770
年末まで意味のないレス乙
0772デフォルトの名無しさん
2016/12/31(土) 09:02:13.43ID:XqWEiNg4いくらでもやり方はある
そもそもセルの位置ってなんかプロパティでなかったか
0773デフォルトの名無しさん
2016/12/31(土) 10:15:52.54ID:/2077635セルのオブジェクトが必要ならRange
セルの位置を表す文字列が必要ならcellのaddressプロパティを使う
0774デフォルトの名無しさん
2016/12/31(土) 10:27:26.68ID:lht2/6/x皆さん、ありがとうございます.
Rangeオブジェクトを返すのがやりやすそうだったので作成したらできました
0775デフォルトの名無しさん
2016/12/31(土) 16:59:32.94ID:7vG7PqoHStatic buf As string
buf = buf & "ABC"
Debug.print buf
End Sub
マクロSampleを3回実行した時、イミディエイトウィンドウに表示される文字は?
という問題で、英字は大文字/小文字を区別しなさいという問題。
解答はABCABCABCと大文字なんだけど、
何でこれ大文字になるの?
初心者なんで解答も含め丁寧に教えてほしいです。
0776デフォルトの名無しさん
2016/12/31(土) 17:15:48.78ID:7vG7PqoHSub Sample1()
Dim MyStr As String
My Str = "ABC"
Call Sample2(MyStr)
MsgBox MyStr & MyStr
Sub Sample2(ByVal tmp As String)
tmp = "DEF"
End Sub
ここでSample1を実行したら何が出るかという問題。
答えはABCABCなんだけど、これがなぜそうなるのかが分からないです。
値渡しがカギらしいけど、参照渡し・値渡しがよく分かってない。
ここもなぜこうなるのか丁寧に教えてほしいです。
あとCall Sample2(MyStr)とsample2の後ろにmystringとカッコ書きでありますが、
ここもどういう意味でしょうか?
0777デフォルトの名無しさん
2016/12/31(土) 17:40:03.73ID:5M+LQLiEその問題集は今すぐ焼きすてろ
0778デフォルトの名無しさん
2016/12/31(土) 17:40:18.28ID:FgAD++uA小文字のABCは、書けるのかな?
どういう形か分かるよね?
次は大文字が使われてるのは
分かるよね?
だからだよ
0779デフォルトの名無しさん
2016/12/31(土) 17:43:02.91ID:6lBFVDjy0780デフォルトの名無しさん
2016/12/31(土) 17:44:50.38ID:506Jc6DbSt☆ti☆ ☆uf As string
☆のところが小文字
0781デフォルトの名無しさん
2016/12/31(土) 17:45:11.91ID:7vG7PqoH間違えた。
何で大文字じゃなく、全角だった。
何で半角じゃなく、全角なのかな?って。
0782デフォルトの名無しさん
2016/12/31(土) 17:46:15.50ID:7vG7PqoH参考書読んでもよく分からんです・・。
0783デフォルトの名無しさん
2016/12/31(土) 17:46:15.97ID:UsB59Qinなんで大文字かって?質問の意味がわからない。
abcabcabcって小文字に変わったらその方がよほど不思議だろ?
0784デフォルトの名無しさん
2016/12/31(土) 17:50:36.17ID:UsB59Qinリロードしてなかったごめん
0785デフォルトの名無しさん
2016/12/31(土) 18:00:19.44ID:FgAD++uA質問正しく二問とも書き直して。
解答欲しいなら良く校正してね
0786デフォルトの名無しさん
2016/12/31(土) 18:12:31.18ID:2Xzfkrwi0787デフォルトの名無しさん
2016/12/31(土) 18:53:20.80ID:hU+zlM5kいや、問題文そのまま写したんだけど・・・。
0788デフォルトの名無しさん
2016/12/31(土) 19:03:53.22ID:bS0q0Exf全角になんかならない。
もし全角になるというのなら、イミディエイトウィンドウに直接
Debug.Print "ABC"
と打っても全角になると思うが?
0789デフォルトの名無しさん
2016/12/31(土) 19:13:01.55ID:KgiQh4Cj大文字になるようにコーディングしたからというのではだめなんだろう
このようなコードでなぜ大文字が返されるか深く考えなくてはいけないんだろう
0790デフォルトの名無しさん
2016/12/31(土) 19:15:16.98ID:hU+zlM5kSub MainProc()
Dim i As Long , j As Long
i = 1
j = 2
Call calc Date(i,j)
MsgBox i + j
End Sub
Sub CalcDate(x As Long , y As Long)
x = x * 10
y = y * 100
End Sub
↑上の2つのプロシージャを同一のモジュールで作成した。
MainProcを実行した時の説明として正しいのを選べ、という問題。
正解はメッセージボックスに210が出るというもの。
解説を見ると、データの渡し方を省略すると参照渡しになるからというもの。
i,yともに10を掛けてないのに、何でこうなるの?
0791デフォルトの名無しさん
2016/12/31(土) 19:18:20.47ID:hU+zlM5k解答が間違ってるとは思えないんだよね。
俺は単純にABCABCABCかな、と思ったんだけど、
なぜABCABCABCと全角になるのか。
まぁ試験問題なんであまり深く考えなくていいのかな・・。
0792デフォルトの名無しさん
2016/12/31(土) 19:19:36.04ID:/2077635コンピュータの仕組みを先ず理解した方が良いぞ
0793デフォルトの名無しさん
2016/12/31(土) 19:31:56.65ID:hU+zlM5k申し訳ないけど、答えられないなら、そういう回答はいらないです。
0794デフォルトの名無しさん
2016/12/31(土) 19:39:25.82ID:FgAD++uA1*10+2*100=210
これだけだ
0795デフォルトの名無しさん
2016/12/31(土) 19:40:50.90ID:FgAD++uAごちゃごちゃ言う前に
こちらが出した要望に早く答えなさい
0796デフォルトの名無しさん
2016/12/31(土) 19:43:48.12ID:CRVQvMfq0797デフォルトの名無しさん
2016/12/31(土) 19:48:01.92ID:rQpeZEGh答えられるけど答えないが正確だ
0798デフォルトの名無しさん
2016/12/31(土) 19:48:29.89ID:dx9vbJE4そもそも関数が何かとかなにも分かってないような
最低限、数学のy=f(x)が理解できないと
質問その2とか参照渡しとか何の関係も無いし
例えば君の質問
>あとCall Sample2(MyStr)とsample2の後ろにmystringとカッコ書きでありますが、
>ここもどういう意味でしょうか?
は
「あと f(x) と f の後ろに x とカッコ書きでありますが、ここもどういう意味でしょうか?」
と言ってるのと同じなんだ
理解できた?
0799デフォルトの名無しさん
2016/12/31(土) 19:50:04.06ID:8SrFBOKrあれれ?おかしいですよ。
MainProcは独立しているはずだから3が表示されると思ったら本当に210と出た。
どうなってるの?
0800デフォルトの名無しさん
2016/12/31(土) 19:57:09.72ID:FgAD++uAえっ?
自分?
でいいのこのレス?
0801デフォルトの名無しさん
2016/12/31(土) 20:01:06.71ID:dx9vbJE40802デフォルトの名無しさん
2016/12/31(土) 20:05:44.64ID:Kmz/fYBF時間のムダだから、良問をやれ
0803デフォルトの名無しさん
2016/12/31(土) 20:11:28.43ID:8SrFBOKrなぜSUB呼んだときに元プロシージャが変わるんだ?
長年やってきたがこれは知らなかったぞ。
まあ呼ばれるプロシージャ側でその引数の値を変える操作は少なくとも意識してはやった記憶はないが。
0804デフォルトの名無しさん
2016/12/31(土) 20:13:27.05ID:2Xzfkrwi問題文じゃなく質問文の方
何を知りたいのかが全然わからない
問題文にしたってend sub足りてない、変なところにスペース入ってる等そのままとは思えない
0805デフォルトの名無しさん
2016/12/31(土) 20:15:21.70ID:FgAD++uAこれ便利よ。
効果たかしされど副作用注意だな
0806デフォルトの名無しさん
2016/12/31(土) 20:16:16.29ID:2Xzfkrwiプロならbyrefを知ろう
0807デフォルトの名無しさん
2016/12/31(土) 20:16:39.17ID:hU+zlM5kDim MyStr As String
My Str = "ABC"
Call Sample2(MyStr)
MsgBox MyStr & MyStr
End Sub
Sub Sample2(ByVal tmp As String)
tmp = "DEF"
End Sub
さっきの質問�A、書き直しました。
途中でEnd Subが抜けていたので追加。
ここでSmaple1を実行した時に何のメッセージが表示されるかという問題。
正解→ABCABC
解説:変数MyStrを値渡しで渡しているため、
呼び出し先のプロシージャで値を変更しても、
呼び出し元の変数MyStrの値は変更されない。
そのため、メッセージボックスには"ABCABC"が表示される。
(解説そのまま抜粋)
こんな感じでどうでしょ?
これでもなかなか理解できないので、分かりやすく教えてください。
0808デフォルトの名無しさん
2016/12/31(土) 20:18:32.40ID:hU+zlM5k0809デフォルトの名無しさん
2016/12/31(土) 20:19:29.64ID:hU+zlM5kだから何でABCABCが出るのか?ってことです。
0810デフォルトの名無しさん
2016/12/31(土) 20:19:57.31ID:bS0q0Exfじゃあちょっと意地悪して,,,
Call calcDate(i, j)
の代わりに
Call calcDate(i + 0 ,j + 0)
とやったらどうなるかな?
もしくは
Call CalcDate((i), (j))
とやったら?
0811デフォルトの名無しさん
2016/12/31(土) 20:23:07.43ID:2Xzfkrwi出力対象がMyStr & MyStrだからMyStrの値を繰り返し出してるだけ
とてもシンプル
0812デフォルトの名無しさん
2016/12/31(土) 20:26:57.79ID:FgAD++uA>>790は>>794に処理書いたけど
あとなにが分からないの?
参照渡しと、値渡し説明できる?
0813デフォルトの名無しさん
2016/12/31(土) 20:27:55.26ID:8SrFBOKr矢切の渡しなら説明できます。五木ひろしの歌です。
0814デフォルトの名無しさん
2016/12/31(土) 20:30:49.79ID:hU+zlM5kだから値渡しとか参照渡しとかその辺が分からないんだって・・・・。
日本語通じないなぁ。
そして何で10掛けるのかと全然説明になってないし。
もう貴方は答えなくていいです。
0815デフォルトの名無しさん
2016/12/31(土) 20:32:03.01ID:2Xzfkrwi聞く側としての礼儀もなしか
0816デフォルトの名無しさん
2016/12/31(土) 20:32:56.74ID:r+SEv/0u通じてないなら説明が悪いんだよ
0817デフォルトの名無しさん
2016/12/31(土) 20:33:26.83ID:hU+zlM5kこれ下がByValじゃなくByRefだったらDEFDEFになるのでしょうか?
だとしたらどうしてそうなるのか教えて欲しいです。
どうも値渡しと参照渡しがよく分からないです。
0818デフォルトの名無しさん
2016/12/31(土) 20:35:35.87ID:FgAD++uAcalcdateで10掛けてるだろ。
0819デフォルトの名無しさん
2016/12/31(土) 20:35:45.11ID:7jBT90pG0820デフォルトの名無しさん
2016/12/31(土) 20:36:12.43ID:CRVQvMfqところで 逆質問なんだけど
>>790は
君の所で 実行できてるの?
>>正解はメッセージボックスに210が出るというもの。
とか書いてるけど
質問なら正しく書かないと
0821デフォルトの名無しさん
2016/12/31(土) 20:38:05.97ID:FgAD++uAそうなるよ。
それがまさに参照(見るだけ)と値(書き換え可能)の違いを表してる。
0822デフォルトの名無しさん
2016/12/31(土) 20:38:12.08ID:bS0q0ExfマジレスするとVBAのByRefは少し難しいよ
他言語の参照渡し(やポインタ渡し)とは微妙に違う面があるから
0823デフォルトの名無しさん
2016/12/31(土) 20:38:40.20ID:hU+zlM5kいや、実行していないですよ。
問題文と解説をそのまま写しただけなので。
0824デフォルトの名無しさん
2016/12/31(土) 20:40:39.89ID:hU+zlM5kcalcdateでかけてるのはiとjではなく、xとyなわけですが?
0825デフォルトの名無しさん
2016/12/31(土) 20:41:40.29ID:CRVQvMfqやっぱね
正解は
Call calc Date(i,j)
が"構文エラー"となる だよ
0826デフォルトの名無しさん
2016/12/31(土) 20:42:46.84ID:2Xzfkrwiまず実行しよう
それでわからなければブレークポイント作って追おう
それでわからなければ調べてみよう
(検索ワード→Excel vba 値渡しと参照渡し)
それでわからなければもう一度聞けばよい
0827デフォルトの名無しさん
2016/12/31(土) 20:44:52.58ID:fdrbXMRt値渡し=変数(定数)の中身が渡される
参照渡し=変数そのものが渡される
結果的に仮引数は実引数の別名のように働く
0828デフォルトの名無しさん
2016/12/31(土) 20:47:22.67ID:dx9vbJE4値渡しの時はプロシージャを越えて他に影響を与えない
影響を与えたいのならば return 文かグローバル変数が必要
参照渡しの時は引数の値を変更したら引数に使った変数は
プロシージャの外まで影響がある
で分かるかな
答える気が無くなるよね
まあ、基本バカクズなんだろ
この程度の力量でプロだって胸張れるんだからある意味たいしたもんだ
解説見て理解したが、>>790 の要点は
0829デフォルトの名無しさん
2016/12/31(土) 20:47:42.77ID:FgAD++uAその返しからすると関数とその引数の
働きがわかってないのね。
じゃ質問
関数f(x)=10*xが在りました。
f(1)はいくつになる?
またf(z)は、どうなる?
0830デフォルトの名無しさん
2016/12/31(土) 20:49:22.02ID:dx9vbJE40831デフォルトの名無しさん
2016/12/31(土) 20:56:37.84ID:hU+zlM5k検索を色々かけたけど分からないんだよね。
あと別にプロとは一言も言っていない訳だが・・w
この力量でプロはあり得ないw
0832デフォルトの名無しさん
2016/12/31(土) 21:00:28.27ID:dx9vbJE4色々読み違えてるなオレ
0833デフォルトの名無しさん
2016/12/31(土) 21:09:49.09ID:CRVQvMfq参照渡し・・入れ物(変数)の場所(メモリ位置)を渡す
(呼び出した方も呼び出された方も 同じ入れ物を使う)
値渡し・・・その名前の通り 値を渡す
(入れ物 が違う)
でどう?
0834デフォルトの名無しさん
2016/12/31(土) 21:11:08.43ID:2Xzfkrwi調べた上でわからないのならスーパーざっくりのイメージを書いてみる
値渡し :自分の財布に入ってる金額を教えて買い物してきてもらう
参照渡し:自分の財布を渡して買い物してきてもらう
値渡しの時はレジ通す時に自分の財布からお金は減らないけど
参照渡しの時はレジ通す時に自分の財布からお金が減ってその状態のまま手元に返ってくる
こんな感じ
0835デフォルトの名無しさん
2016/12/31(土) 21:12:46.95ID:5M+LQLiE0836デフォルトの名無しさん
2016/12/31(土) 21:13:02.57ID:8SrFBOKr矢切の渡し・・・五木ひろしの歌
じゃあ参照渡しのとき(i)とカッコつけて渡したら?(i+1)と1を足して渡したら変数はどうなる?
0837デフォルトの名無しさん
2016/12/31(土) 21:14:53.18ID:2Xzfkrwi調べた上でわからないって言ってる以上は軽く調べただけで出てくるような表現で伝わるとは思えないからな
0838デフォルトの名無しさん
2016/12/31(土) 21:18:21.80ID:5M+LQLiE伝わらなかったらまず自分の無能を疑うべきだな
0839デフォルトの名無しさん
2016/12/31(土) 21:19:19.22ID:2Xzfkrwi当たり前だな
0840デフォルトの名無しさん
2016/12/31(土) 21:20:20.89ID:hU+zlM5kSub Sample1()
Dim MyStr As String
My Str = "ABC"
Call Sample2(MyStr)
MsgBox MyStr & MyStr
End Sub
Sub Sample2(ByVal tmp As String)
tmp = "DEF"
End Sub
さっきの問題のたとえで言うと、ByValは値渡しだから、
値=tmp=DEFを渡すんじゃないの?素直に考えると。
だから正解はDEFDEFになると思ったんだけど。
0841デフォルトの名無しさん
2016/12/31(土) 21:21:41.42ID:hU+zlM5kこれはByRefが省略されてる?のかな。
0842デフォルトの名無しさん
2016/12/31(土) 21:23:39.91ID:hU+zlM5kMy Str = "ABC"だから、
Call Sample2(MyStr)
MsgBox MyStr & MyStr
は、ABCABCで良いって事?
0843デフォルトの名無しさん
2016/12/31(土) 21:29:59.88ID:2Xzfkrwiなーるほど
やっと質問を聞き出せた気がする
値渡しってのはsample2から見たら「値渡され」ってこと
値にしろ参照にしろ渡すのはそのメソッドを呼ぶときだけだよ
0844デフォルトの名無しさん
2016/12/31(土) 21:33:05.11ID:/2077635基本がわかってないから説明を正しく解釈出来ないんだよ
あと何でお前の質問にタダで答えてくれる人がいると思ってる?
0845デフォルトの名無しさん
2016/12/31(土) 21:33:34.03ID:CRVQvMfq>>じゃあ参照渡しのとき(i)とカッコつけて渡したら?(i+1)と1を足して渡したら変数はどうなる?
入れ物(箱)が VBA内部で作られてそれが 渡される この場合も動作は変わらんけど
内部で作られたものは使えないから 結果論的に 値渡しと変わらなくなる
0846デフォルトの名無しさん
2016/12/31(土) 21:33:54.39ID:fdrbXMRt0847デフォルトの名無しさん
2016/12/31(土) 21:35:08.97ID:dx9vbJE4そう
参照渡しなのでCalcDateの影響がある(上書きされてる)
MainProc内での名前はi,j
CalcDate内での名前はx,y
どちらも同じ変数
>>842
そう
値渡しは外に影響が無いのでSample2の影響がSample1には伝わらない
結果、意味の無い関数になっている
0848デフォルトの名無しさん
2016/12/31(土) 21:38:06.80ID:mnvVNNIM矢切の渡しは細川たかしの歌やで
0849デフォルトの名無しさん
2016/12/31(土) 21:41:37.54ID:bS0q0ExfByRef tmp
と書いてあるところに変数 X を渡したら tmpは X と同じ実体。
ByVal tmp
と書いてあるところに変数 X を渡したら tmpは X のコピー。
基本はこれでいいが、変数それ自体じゃなくて x + 0 とかを渡したら?とか
ByRef tmp As Variant
と書いてあるところに
Dim i As Long と宣言された変数 i を渡したら?
とかいろいろ注意すべき点がある。
0850デフォルトの名無しさん
2016/12/31(土) 21:45:29.06ID:91PLeCpZ0851デフォルトの名無しさん
2016/12/31(土) 21:46:53.77ID:hU+zlM5k>>790はxとyという箱にiとjがそれぞれ入ったっていう解釈でいいの?
だからi×10 j(2)×100で結果として210ってこと?
>>843
ごめんそれでもよく分からない。
メソッドとか呼び出すとかなるとこんがらがる。
0852デフォルトの名無しさん
2016/12/31(土) 21:54:25.03ID:2Xzfkrwi何がわからないのか何がこんがらがるのかを記載してほしい
でないと「そっかー」で終わる
0853デフォルトの名無しさん
2016/12/31(土) 21:55:46.20ID:5M+LQLiEcに参照渡しはないのだがw馬鹿だなお前w
0854デフォルトの名無しさん
2016/12/31(土) 21:57:21.34ID:dx9vbJE4>>849の説明が正しくて、参照渡しってのは実体は全く同じ変数で、別名称でやりとりしてるだけ
だから以降はその通り
別名称にしてる理由の一つは、保守しやすくなるから
変数の名前を変えたくなった時、片方のプロシージャ変数名だけ変えれば済む
他に、速度が速くなるとかの利点もある
0855デフォルトの名無しさん
2016/12/31(土) 22:02:04.73ID:8SrFBOKrあれそうだっけ?まあどっちでも一緒だ。
0856デフォルトの名無しさん
2016/12/31(土) 22:02:20.00ID:hU+zlM5k>ByVal tmp
と書いてあるところに変数 X を渡したら tmpは X のコピー。
だから、tmpはX(ここではABC)になる。
だから呼び出すtmp(ここではMyStr)はABCになるってこと?
0857デフォルトの名無しさん
2016/12/31(土) 22:04:12.45ID:91PLeCpZポインタがある。
内部的に同じ物だって事は分かった上でのレスだよな?
0858デフォルトの名無しさん
2016/12/31(土) 22:04:22.50ID:hU+zlM5kこれ、すごく分かりやすい。
じゃあ値渡しは?xという変数はxという意味で、参照渡しと変わらないのでは?
0859デフォルトの名無しさん
2016/12/31(土) 22:06:14.70ID:5M+LQLiEお前は何も分かってない馬鹿だな
0860デフォルトの名無しさん
2016/12/31(土) 22:08:02.50ID:91PLeCpZ話についてこれないなら無理矢理入ってこようとしなくていいよ。
0861デフォルトの名無しさん
2016/12/31(土) 22:08:42.93ID:bS0q0Exfコピーだと言ったでしょ。
別の実体。
別の実体とは、元の実体と別の位置と寿命をもつモノ。
もちろん短い寿命ね。
0862デフォルトの名無しさん
2016/12/31(土) 22:10:37.07ID:dx9vbJE4最後の行がちょっと分からないけど、呼び出す時に渡した変数の値はABC
0863デフォルトの名無しさん
2016/12/31(土) 22:10:57.14ID:5M+LQLiE馬鹿の常套句「話についてこれない」
0864デフォルトの名無しさん
2016/12/31(土) 22:12:09.68ID:bS0q0Exf>メソッドとか呼び出すとかなるとこんがらがる。
オブジェクト型のByValはコピーではなく元の実体。
だからメソッド呼び出しは元のオブジェクトに対するメソッド呼び出しになる。
し か し
代入操作だけは違うんだな。
これがややこしい。
Object*
と
(Object*)&
の違いとでもいうべきか。
0865デフォルトの名無しさん
2016/12/31(土) 22:12:32.06ID:91PLeCpZ0866デフォルトの名無しさん
2016/12/31(土) 22:14:04.40ID:5M+LQLiEどうして馬鹿はcで例えたがるのか
プログラミング界の馬鹿の七不思議の一つだな
0867デフォルトの名無しさん
2016/12/31(土) 22:17:33.47ID:fdrbXMRt0868デフォルトの名無しさん
2016/12/31(土) 22:20:42.00ID:bS0q0Exf例えてないよ???
0869デフォルトの名無しさん
2016/12/31(土) 22:28:23.69ID:91PLeCpZ関数の引数がCPUの扱えるbit数を超えるか超えないかだから、
基本型とObject型で違うって覚えておけばそこまでややこしくない気がする。
0870デフォルトの名無しさん
2016/12/31(土) 22:30:15.79ID:hU+zlM5kってこと?
0871デフォルトの名無しさん
2016/12/31(土) 22:36:15.36ID:91PLeCpZSub Sample1()
Dim MyStr As String
MyStr = "ABC"
Dim tmp As String
tmp = MyStr
tmp = "DEF"
MsgBox MyStr & MyStr
End Sub
という事。
0872デフォルトの名無しさん
2016/12/31(土) 22:43:28.07ID:hU+zlM5kちょっとわかりにくい。
Sub Sample1()
Dim MyStr As String
�@ MyStr = "ABC"
�A Dim tmp As String
�B tmp = MyStr
�C tmp = "DEF"
�D MsgBox MyStr & MyStr
End Sub
�@でMyStrがABCになる
�BでtmpがMyStrに。
�CでtmpがDEFに上書きされる。 tmp = MyStr = ABCから tmp = DEFに
�DでMyStr=ABCだからメッセージボックスはABCABCになるってこと?
tmptmpじゃなくて?
0873デフォルトの名無しさん
2016/12/31(土) 22:45:41.28ID:bS0q0Exfサイズは関係ないと思う
ByVal x As Variant
のxにでかい配列渡しても値渡しだし、Variant自体16(or 24)バイト
0874デフォルトの名無しさん
2016/12/31(土) 22:47:38.69ID:bS0q0Exf>�BでtmpがMyStrに。
ここが間違い
tmpはMyStrではなく、その値である"ABC"になるだけ。
0875デフォルトの名無しさん
2016/12/31(土) 22:49:40.63ID:hU+zlM5kなぜ?tmp=MyStrでは?
0876デフォルトの名無しさん
2016/12/31(土) 22:53:21.02ID:91PLeCpZByRef tmp As Stringなら、
Dim MyStr As Stringを引き継ぐんだけど、
ByVal tmp As Stringだから、
Sample2呼び出しの際に宣言されたDim tmp As Stringに渡されてる事になる。
0877デフォルトの名無しさん
2016/12/31(土) 22:53:27.09ID:bS0q0Exf違う
>�A Dim tmp As String
としたとき、tmp は String 型のひとつの実体となる。
実体がひとつ増えたんだ。
tmp = MyStr
と書いたからといって、tmp と MyStr が同一物だったとしたら「実体がひとつ増えた」ことに反してしまう。
0878デフォルトの名無しさん
2016/12/31(土) 23:00:07.76ID:dx9vbJE4値渡しでは、別の実体に中身の値をコピーした上で渡してるから、もう元の MyStr を上書きできないし、
呼び出し時に使った変数で呼出元に値を知らせることは出来ない約束になっている
コピー元のMyStrはABC のままで変わってない
コピー先のtmpはDEF これを元のプロシージャに伝える手段が何も無い別の実体だから
もし「Sample2の中」にも
msgbox tmp & tmp
があれば、DEFDEF がまず表示される
その後、Sample1に処理が戻ってから、ABCABC が表示される
0879デフォルトの名無しさん
2016/12/31(土) 23:02:50.19ID:hU+zlM5kじゃあtmp = MyStr は何を意味するの?
0880デフォルトの名無しさん
2016/12/31(土) 23:09:16.85ID:dx9vbJE4普通はそこに疑問を持たない
もし、そこに疑問を持つレベルなら、参照渡しとか値渡しとか以前に
プロシージャなんか使わずに、基本的なプログラムを数多く作るのが先だ
実際に自分で実行する必要がある
0881デフォルトの名無しさん
2016/12/31(土) 23:14:36.35ID:F3qhDaCb0882デフォルトの名無しさん
2016/12/31(土) 23:17:24.02ID:hU+zlM5kDim MyStr As String
MyStr = "ABC"
Call Sample2(MyStr)
MsgBox MyStr & MyStr
End Sub
Sub Sample2(ByVal tmp As String)
tmp = "DEF"
End Sub
よく分からない。
Sample2は値渡し。tmp(DEF)を呼び出すが、
その際にSample1の中身をコピーするので(ABC)、
値も変わってしまうって事?結果、ABCABCになる?
0883デフォルトの名無しさん
2016/12/31(土) 23:18:43.81ID:FgAD++uA0884デフォルトの名無しさん
2016/12/31(土) 23:22:16.72ID:91PLeCpZ全ての変数は代入文で中身を書き換えているのであって、初期値を定義しているわけではない。
順接の基本に沿って上から順番に処理していくのでtmpが書き換わっているのはSample2が呼び出された時。
各プロシージャは自分の範囲で宣言した変数しか知らないので、Sample1はSample2のtmpの中身を知らない。
0885デフォルトの名無しさん
2016/12/31(土) 23:25:39.66ID:F3qhDaCbSample2を呼び出してる実引数はMyStrで値は"ABC"
呼び出されたSample2の仮引数はByValで宣言されているので、実引数の値のコピーを受け取る
だからtmpにまずセットされるのは、MyStrとは別の"ABC"
MyStrとは別なのでSample2の内部で変更しても、呼び出し元であるSample1のMyStrには影響しない
まあ、わかりにくいけど頑張れ
この先に参照型(VBAの用語ではないけど)っていうさらにややこしやつがあるからw
0886デフォルトの名無しさん
2016/12/31(土) 23:28:38.80ID:hU+zlM5k�@Dim MyStr As String
�AMyStr = "ABC"
�BCall Sample2(MyStr)
�CMsgBox MyStr & MyStr
�DEnd Sub
�ESub Sample2(ByVal tmp As String)
�Ftmp = "DEF"
�GEnd Sub
>>884の説明を基にすると、�Bの時点ではまだ値は変わっていない。ABCのまま。
で、�CのメッセージボックスではMyStrであるABCABCが出るってこと?
0887デフォルトの名無しさん
2016/12/31(土) 23:32:18.48ID:bS0q0Exf>�Bの時点ではまだ値は変わっていない。ABCのまま。
Sample2側の変数 tmp の価は変わっているけどね。MyStr はそのまま。
あるフォルダにあるファイルを別フォルダにコピーしたあと、そっちをいじっても元のファイルに影響がないのと同じ。
0888デフォルトの名無しさん
2016/12/31(土) 23:35:07.15ID:dx9vbJE4前にもj(2)って書いてたのが気になったが
j(2)とかtmp(DEF)という表現は無いよ
一般的な使い方では無いので、意味も伝わらない
j=2 と tmp=2
しかも、=はイコールじゃなくて代入を表す
この辺が理解を妨げているのかも
0889デフォルトの名無しさん
2016/12/31(土) 23:35:42.82ID:91PLeCpZそう。�Bの時点ではtmpの中には如何なる値も入っていない。
0890デフォルトの名無しさん
2016/12/31(土) 23:48:54.45ID:hU+zlM5kSub Sample1()
�@Dim MyStr As String
�AMyStr = "ABC"
�BCall Sample2(MyStr)
�CMsgBox MyStr & MyStr
�DEnd Sub
�ESub Sample2(ByVal tmp As String)
�Ftmp = "DEF"
�GEnd Sub
じゃあこれが�EがBeRefになったら?
答えはDEFDEFとなるのは分かってるんだけど、原理が分かってない。
>>884の説明を基にすると、上から順に処理をするわけで、
�Bの段階ではMyStrはまだABCだから�CではABCABCとなる・・あれ?
0891デフォルトの名無しさん
2016/12/31(土) 23:49:34.84ID:hU+zlM5k0892デフォルトの名無しさん
2016/12/31(土) 23:52:38.27ID:FgAD++uA処理順が間違えてる。
やっぱり関数わかってないから
とんちんかんな解釈してる
0893デフォルトの名無しさん
2016/12/31(土) 23:55:35.11ID:F3qhDaCbMyStrとtmpをウオッチ式に入れてステップ実行で1命令ずつ実行させてみ
0894デフォルトの名無しさん
2016/12/31(土) 23:57:23.73ID:91PLeCpZついでに変数にマウスポインタ当てれば変化の具合も分かるわ。
0895デフォルトの名無しさん
2016/12/31(土) 23:59:09.82ID:hU+zlM5kさっきレスで
「ファイルをコピーしてコピー先のデータを弄っても、元のデータは変わらない」
ってそういう意味か。
0896デフォルトの名無しさん
2017/01/01(日) 00:13:12.03ID:wgGXbt0pここではDEFだから、Sample2はDEFになるのか。
0898デフォルトの名無しさん
2017/01/01(日) 00:19:34.34ID:tpetM3cd以上
0901デフォルトの名無しさん
2017/01/01(日) 01:44:15.75ID:+58q/GTn2) set a=b
3) if a=b then
困った事にこれら全てで=の意味合い異なるからな
0902デフォルトの名無しさん
2017/01/01(日) 01:58:59.40ID:3P2/rHG+0903デフォルトの名無しさん
2017/01/01(日) 02:09:52.45ID:V9m79CGb値の代入かポインタの代入かの違い。
つまり
a = b
b = c
の場合はaにcの値は代入されないが、
Set a = b
b = c
の場合はaにもcの値が代入される。
0904デフォルトの名無しさん
2017/01/01(日) 02:33:49.18ID:+58q/GTn値型と参照型で勝手に別れる
0905デフォルトの名無しさん
2017/01/01(日) 02:59:58.37ID:5bQycJKKSetと意味が違うとかいうなら、まず1)はLet a = bと書くべき
あと用語的にはポインタじゃなくて(オブジェクト)参照
aにもcの値が代入されるって言い方も誤解を招きそうだな
その書き方で代入されてるのはそのオブジェクトのデフォルトプロパティの値だぜ
書いてる本人はわかってると思うけど、aやbが参照しているインスタンスは変更されてない
0906デフォルトの名無しさん
2017/01/01(日) 03:14:54.02ID:V9m79CGb俺じゃなくて質問してるヤツに答えてやってくれよ先生。
0907デフォルトの名無しさん
2017/01/01(日) 08:07:59.22ID:gq1qxslSなんかちょっと見ないうちに面白い話題になっているねー。
さて、ByRefやByValの効用が少し理解出来てきたところで
もう少しややこしいこと言ってもいいかな。
実は引数の参照渡しとか値渡しって
値型の値渡し、
参照型の値渡し、
値型の参照渡し、
参照型の参照渡しって4種類あって、
ByRef、ByVal以外に引数の型にも影響を受けるんだよ。
もっとも知ってる連中にとっては
「何を今更そんな基本的なことを」ってなるだろうけどね。
0908デフォルトの名無しさん
2017/01/01(日) 08:35:13.71ID:+58q/GTnletは書いてる人見たこと無いなあ
ES6で急に復活した感ある
0909デフォルトの名無しさん
2017/01/01(日) 08:52:49.10ID:IBkRXg2m俺の理解が正しいか 不安だから あえてレスしてみるけど
オブジェクト変数は 実体(インスタンス?)への参照を持ってるだけだから
参照型の・・・になるのかなと
↑この理解正しい?
0910デフォルトの名無しさん
2017/01/01(日) 09:01:42.47ID:/jLTRoD+文字列はVB系では参照型じゃないんだっけ?
0911デフォルトの名無しさん
2017/01/01(日) 09:36:42.89ID:Bm1fWS78いつの間にか寝落ちしてました。
皆さん長時間にわたりレスをくれてありがとうございました。
皆さんのレスをもとにもう少し勉強してきます。
またよろしくお願いします。では。
0912デフォルトの名無しさん
2017/01/01(日) 09:37:46.13ID:gq1qxslS8割がた合っていると思う。
残り1割は既に>>910の人が言っている配列の話。
もう1割はインスタンスが設定されていない、
つまりNothingのときの挙動の違い。
0913デフォルトの名無しさん
2017/01/01(日) 11:00:46.83ID:e0wFI4RYお前の説明が誤解を招くってことなんだからお前にアンカーするのは当たり前
0914デフォルトの名無しさん
2017/01/01(日) 11:42:41.40ID:3P2/rHG+紅白で有村かすみちゃんが気になったのですが、この映像にでている人はかすみちゃんですかね?
https://www.youtube.com/watch?v=yb_NTK0ixIg
0915デフォルトの名無しさん
2017/01/01(日) 11:53:07.55ID:V9m79CGb誤解を招かない解説を質問者にしろって事だよ。
0916デフォルトの名無しさん
2017/01/01(日) 12:19:47.23ID:YlDkqvBj固定長配列は宣言・定義したプロシージャ内では値型だと思う。
可変長配列は確かに参照型ともいえるけど他のプロシージャにByValで渡すとコピーが作られる。
0917デフォルトの名無しさん
2017/01/01(日) 12:28:01.88ID:V9m79CGbhttps://msdn.microsoft.com/ja-jp/library/dd314344.aspx
0918デフォルトの名無しさん
2017/01/01(日) 12:45:42.22ID:pfVAI4Bkvbaでは値型の配列じゃなかったっけ文字列は
byte型かなんかの
0919デフォルトの名無しさん
2017/01/01(日) 13:42:34.82ID:sC1oVy1Zセルに値書いて渡すとか、
行頭にPublic付けるとか、
理解できない人でも何とかなるのがVBAなのに。
0920デフォルトの名無しさん
2017/01/01(日) 14:29:45.19ID:T039qKRQ>Set a = b
>b = c
>
>の場合はaにもcの値が代入される。
の
>b = c
この書き方はbにオブジェクトが紐付いている前提かつ
bに紐付いたオブジェクトにデフォルトプロパティがある場合に限られるから意味が違ってくる
Rangeオブジェクトとかで無意識に使う場合もあるから特殊とは言わんけど
初心者に値渡しや参照渡しを説明する際に出す例としては混乱の元
俺が混乱したし
0921デフォルトの名無しさん
2017/01/01(日) 14:33:43.08ID:JAP1+tzF> 誤解を招かない解説を質問者にしろって事だよ。
ダメ文章の典型やん...
1. (>>905 は)誤解を招かない解説を質問者に(たいして)しろって事だよ
2. 誤解を招かない解説を、質問者にしろって事(を俺は言ってるん)だよ
根本的に文章表現能力が低すぎる w
0922デフォルトの名無しさん
2017/01/01(日) 14:40:57.88ID:V9m79CGbだから他人の説明に横やり入れる前に、自分の言葉で一から十まで説明しろと言っているだろ。
0923デフォルトの名無しさん
2017/01/01(日) 14:44:57.13ID:V9m79CGb>(>>905 は)誤解を招かない解説を、質問者に(たいして)しろって事(を俺は言ってるん)だよ
一つにまとめられるんだが・・・。
0924909
2017/01/01(日) 14:50:05.64ID:IBkRXg2mありがと 80点か・・・・
残りの2割は 自分でも ちょっと消化しきれてないけども
まだまだ勉強足りんな俺
0925デフォルトの名無しさん
2017/01/01(日) 14:58:22.01ID:T039qKRQ俺は>>903に対して一言書きたかっただけだからね
それが本人に伝わったならどうでもいいよ
初心者にいきなりプロパティひっくるめて理解できるとは思えないし
0926デフォルトの名無しさん
2017/01/01(日) 15:11:56.84ID:JAP1+tzFそれは 1. に冗長な言葉を追加してるだけ
ひょっとして 2. の意図を理解できてないのか?
マジでちょっと恥ずかしいレベルだぞ
0927デフォルトの名無しさん
2017/01/01(日) 15:27:16.69ID:V9m79CGbこれは詳しく聞いてみたいわ。
>>921と>>923の三つの文例にどのような違いを見いだしているのか教えてくれ。
0928デフォルトの名無しさん
2017/01/01(日) 15:53:55.51ID:X3hcI7Liマジで文章理解力もないのか...
2. では解説するのは質問者な
0929デフォルトの名無しさん
2017/01/01(日) 16:04:35.53ID:V9m79CGbああ、なるほどな。
全体から一部だけ切り出して日本語無視すれば、そう解釈出来るわな。
なんで1と2で同じ意味の文章を別の書き方してるのかと思ってたわ。
0930デフォルトの名無しさん
2017/01/01(日) 16:14:29.40ID:pfVAI4Bk0931デフォルトの名無しさん
2017/01/01(日) 17:02:29.39ID:5bQycJKK俺が元質問者に懇切丁寧に解説しろってか
初心者に誤解を招くような解説するならしない方がマシだと思ってるんだが
そもそも俺は>>901に同意してないんだがな
=に代入と比較の二つの意味がある事は確かだけど、SetもLetも代入として使われてる
だから1と2は意味的には同じだ
それでも比較と代入を区別する意味はあるが
お前の解説だと
Let a = b
Let b = c
と
Set a = b
Let b(.デフォルトプロパティ) = c
の比較なんだから、=の役割は全部代入演算子だぞ
で、これを大元の質問者に解説しても、初心者に理解できるとは思わんし
理解できるように説明するのもめんどくさい
ただ誤解を招く説明は嘘説明よりたち悪いと思ってるから説明したやつに指摘しただけ
0932デフォルトの名無しさん
2017/01/01(日) 17:18:38.53ID:5bQycJKKV9m79CGbの意図が、俺が元質問者に懇切丁寧に解説しろ じゃないなら知らんが
回答を批判されるのが嫌なら公開掲示板で回答するのやめとけ
公開されたものを批判するのと、質問に回答するのは別の話だ
自分で回答しないのに他人の回答を批判する権利がないなんて、すくなくともここでは間違ってるぞ
0933デフォルトの名無しさん
2017/01/01(日) 17:25:59.04ID:YlDkqvBjと
Set x = y
じゃ意味も違うと思うよ。
「どっちも代入」ではくくれない無視できない違い。
0934デフォルトの名無しさん
2017/01/01(日) 17:37:59.02ID:V9m79CGbSet a = b
が同じ物であるって方がよっぽど誤解を招く説明だよな。
少し前にByValとByRefの違いで大混乱していた初心者がいて、その流れをくんでの>>901なわけだから。
だいたい>>903で全部、代入として扱ってるのに「全部代入演算子だぞ」って突っ込みもおかしい。
俺の説明した範疇外で勝手に混乱して「誤解を招く!」って叫んでいる様にしか見えん。
0935デフォルトの名無しさん
2017/01/01(日) 17:41:17.07ID:5bQycJKKたしかにそれを区別する意味も必要な場合もあるんだけど
比較か代入かというより大きな区別があっての話だからな
代入での区別は、少なくともVBAではSetとLetで使い分けられてるわけで
その違いは=の違いというよりSetとLetの区別だとして考えるべきだと思ってる
これがVB.NETになるとどちらもLetになったから、参照型と値型の区別が重要になってくるんだがな
0936デフォルトの名無しさん
2017/01/01(日) 17:52:33.88ID:5bQycJKKお前の理論で行けば、値の代入と参照の代入はどこでどう区別されるの?
b=cはどっちの例でも値の代入(Let)なんだが、今説明すべきは値の代入か参照の代入かの違いのはずだが
0937デフォルトの名無しさん
2017/01/01(日) 18:24:10.86ID:V9m79CGbだんだん混乱してきたんだが、「どう区別される」ってのはどの範囲での話?
CPUの動きの時点でまず違うし、VBAの実装上でも扱い方が異なるし、
むしろどの範囲なら区別しないで済むのか分からない。
比較演算子と代入演算子の違いって事?
それなら「同じ演算子で異なる命令を扱える」だけだから誤解しているのは君だよ。
SetもLetも比較も、CPU上では別の命令に属している。
0938デフォルトの名無しさん
2017/01/01(日) 18:36:58.36ID:5bQycJKKお前にその区別ができてないとは言わないが
>値の代入かポインタの代入かの違い。
て言ってるのに
a = b
b = c
Set a = b
b = c
のどれが値の代入でどれが参照の代入でなぜそうなのかも言ってないし
>Set a = b
>b = c
>の場合はaにもcの値が代入される。
って言ってるし
どういう説明してるんだ、って話
0939デフォルトの名無しさん
2017/01/01(日) 18:49:53.89ID:V9m79CGb値の代入だの参照の代入だのポインタだのという専門用語を知らなくても、
Setがついているかどうかで動作が異なるという事が理解できればいいし、
内部的な動きについて説明しないのであればbに連動してaにも同じ値が代入されるという説明になるだろう。
そのままの解釈で飲み込んでも実用上の支障は無いし、そこに文句あるなら自分で解説してほしい。
君には「他人を批判する権利」はあるのかもしれないが、「面倒くさい事を他人に代行してもらう権利」はないんだぞ。
0940デフォルトの名無しさん
2017/01/01(日) 19:55:56.36ID:5bQycJKKもしお前が本気でこう考えてるか、この表現で問題が無いと考えてるようならもういいや
こいつの言う事は信用するなって言うだけだ
面倒くさい事を他人に代行してもらおうという気は毛頭ないから
お前やだれかにそれを説明しろとか言わないから
0941デフォルトの名無しさん
2017/01/01(日) 20:11:55.07ID:V9m79CGbもちろん同じインスタンスを参照しているからaから取ろうがbから取ろうが同じ値になるって仕組みは十分に分かっているけども、
じゃあこれをインスタンスへの参照っていう「初心者が分からないであろう内部的な動作」を交えずに解説する場合、
どの様な言い回しにすれば君は満足なのか知りたいんだけど、君は面倒くさいから説明しないんだろ?
挙げ句の果てに何の論拠も示さずに相手を嘘つき呼ばわりしますって面白いなぁ君。
0942デフォルトの名無しさん
2017/01/01(日) 20:13:11.54ID:V9m79CGb>>941は>>940へのレスね。
0943デフォルトの名無しさん
2017/01/01(日) 20:32:27.31ID:5bQycJKK根拠のない嘘つき呼ばわりなんてした覚えが無いがね
正確でない発言を問題ないと思ってる人間の意見は信用するなって言ってるんだが
自分が正確に説明できないのを指摘されたら、他人にそれを説明しろってか
お前にも面倒くさい事を他人に代行してもらう権利なんてないよ
ま、この件はもうこれ以上進展なさそうだし終わりにしとくわ
0944デフォルトの名無しさん
2017/01/01(日) 20:46:14.71ID:V9m79CGb君もLetとSetは同じだとか正確でない事を散々主張してたから、
君が君自身を信用してはならない事になるんだけども。
まぁ面倒くさいとか言って「初心者向けの正確な説明」を提出しない以上は進展しないから、終わりにするのは妥当だね。
0945デフォルトの名無しさん
2017/01/01(日) 23:00:13.48ID:x0zVv2ho非表示でなくても操作できなくするとかでもいいです。
0946デフォルトの名無しさん
2017/01/01(日) 23:06:53.93ID:zRBSr+lhそれをいじって見たら?
0947デフォルトの名無しさん
2017/01/01(日) 23:07:46.87ID:V9m79CGbMe.MultiPage1.Page1.Visible = False
という形で表示をいじれるみたいだから、これでどうにかなんじゃね。
0948デフォルトの名無しさん
2017/01/01(日) 23:27:01.74ID:x0zVv2hoMe.MultiPage1("Page1").Visible = False
でとりあえず消せました。 IFで条件式つけます。
0949デフォルト@名無しさん
2017/01/02(月) 04:13:03.73ID:elgXG22T学校の課題がどうしてもできないのです。レベルは初級です。IDに関しては、スカイプちゃんねるというサイトで行っておりますので、もしよろしければ一度見てみて下さい(>_<)
0950デフォルトの名無しさん
2017/01/02(月) 07:13:33.09ID:fgOT9KPs0951デフォルトの名無しさん
2017/01/02(月) 21:07:00.46ID:ltYDHoJ8面倒臭い
ここで聞けばいいのに
0952デフォルトの名無しさん
2017/01/02(月) 21:29:23.34ID:X/Pb2mwH0953デフォルトの名無しさん
2017/01/02(月) 22:33:33.37ID:Jdu9t/FUかりに>>949が女でおまんこさせてくれるとしても微妙なラインぞ
0954デフォルトの名無しさん
2017/01/02(月) 22:51:26.67ID:t/0ToDE8課題なので解答はしないけど、ヒントくらい出しますよ。分かれば、だけど。
0955デフォルト@名無しさん
2017/01/02(月) 23:43:11.39ID:elgXG22Tここで募集して、メールなり、スカイプのチャットなり(?)で自力で考えた解答をとりあえずお送り致しますので、
スカイプで添削兼、質問と相談に乗って頂きたいと思っております。
ここの版で直接書き込まないのは、質問が多岐に渡るのと、プログラムの、どの要所を載せれば治るのかがよくわからないからです…。
あとここでもし質問して、それが皆様にとって超簡単だとしたら、
「そんなこともわからねーのかよググレカス!」とか言われたらどうしようっていうのがあります(> <)
内容はifの条件分岐あたりになります。
確かにメリットが皆様になく、申し訳ないのですが、私に付き合って下さるというお優しい方いらっしゃいましたら、よろしくお願いします。
もしいらっしゃいましたら、すかいぷちゃんねるというサイトでvbaのタグを検索したら、
私が出てくるはずです!
http://skypech.com/post/finish?id=9894733
0956デフォルトの名無しさん
2017/01/02(月) 23:55:25.73ID:ltYDHoJ80957デフォルトの名無しさん
2017/01/03(火) 00:00:05.94ID:KKVFl3k5Skypeだろうとも罵倒するやつは罵倒する
どこで聞いても同じだよ
0958デフォルトの名無しさん
2017/01/03(火) 00:43:43.22ID:3mqXOGxMうう…そうなのですか…
わかりました、勇気を出してここで聞いてみます
Private Sub CommandButton1_Click()
If CheckBox1 Then
y = 500 + 300 + 200←�@
If CheckBox2 Then
y = 500 + 300
ElseIf CheckBox3 Then
y = 500 + 200
Else
y = 500←�@'
End If
End If
If CheckBox2 Then←�A
y = 300 + 200 + 500←�@
If CheckBox1 Then
y = 300 + 500
ElseIf CheckBox3 Then
y = 300 + 200
Else
y = 300←�@’
End If
End If
0959デフォルトの名無しさん
2017/01/03(火) 00:45:05.92ID:3mqXOGxMIf CheckBox3 Then←�A’
y = 200 + 300 + 500←�@
If CheckBox1 Then
y = 200 + 500
ElseIf CheckBox2 Then
y = 200 + 300
Else
y = 200←�@’
End If
End If
y=200+300+400←�B
Label1.Caption = y
End Sub
これはユーザーフォームを作って計算機を作り、
チェックボックス1…500
チェックボックス2…300
チェックボックス3…200 をそれぞれ選択したり,そして加算できるようにしたいのです。
(質問�@)�@と�@’の値を入れ替えるとエラーがでた。上記だとうまく計算できた。
最初の�@にはy=500、y=300,y=200が正しいはずなのになぜか?
(質問�A)If、IfElse,Elseではエラーがでた。なぜ三段全てIfでないと作動しなかったのか?
(質問�A続)If CheckBox1 Then と If CheckBox1.Value=True Thenの違いはあるか?
(質問�B)上記の文は不適切だが、現状ではチェックボックス3つのうち2つまでなら加算できるが、チェックボックス3つ全てを合計することはできない。どうすればいいのか?
0960デフォルトの名無しさん
2017/01/03(火) 00:53:33.27ID:r2luLCsm>チェックボックス2…300
>チェックボックス3…200
自分でヒント書いてて気づかないのかよ。
0961デフォルトの名無しさん
2017/01/03(火) 01:04:57.30ID:KKVFl3k5(質問�@)
プログラムとしては正常となるはず
エラーとは計算ミスのことを言ってる?
異なるならどんなエラー?
(質問�A)
IfElseは存在しないためエラーとなる
elseifとすればよい
(質問�A続)
同等
(質問�B)
sub otameshi()
dim y as long
y=0
if chkbox1 then y=y+500
if chkbox2 then y=y+300
if chkbox3 then y=y+200
Label1.Caption = y
End Sub
0962デフォルトの名無しさん
2017/01/03(火) 01:07:35.09ID:3mqXOGxMえっ、なぜこれがヒントになるのですか…?
0963デフォルトの名無しさん
2017/01/03(火) 01:14:58.48ID:la84XY8q良い解答。
0964デフォルトの名無しさん
2017/01/03(火) 01:26:38.41ID:/ZQ7wvWM0965デフォルトの名無しさん
2017/01/03(火) 01:44:32.13ID:3mqXOGxM御解答して下さり、ありがとうございます。
(質問�B)の解答だけで、そのまま全て計算できてしまうのですね…
これは、同列(?)のifの場合、if or if or ifという概念ではなくて、if and if and ifという事なのかなと思いました。
私は、check1を選択→残りは2か3→2を選択した場合、3を選択した場合、その他全てという風に考えてしまっていました。
すみません、961様の解答からの質問なのですが、
(質問�@)�@と�@‘の値を入れ替えると、それぞれ単体のボックスのみのチェックで1000と計算、
check1+check2=800,check1+check3=700、check2+check3=500とあられもない数で計算されてしまうのです…
(質問�A)�Aの箇所をそれぞれElseIf,Elseとすると、「対応するIfがありません」
となってしまうのです。
(質問�B)961様の解答が物凄くシンプルで、本来こちらでやるべきとは思うのですが、私の考え方で3つの合計数を出す方法はあるのでしょうか?もしくは、そもそも私の考えが間違っているので、表しようがないのでしょうか…?、
正直、私の質問は皆様にとって非常に面倒臭いと改めて思いましたので、次回より、地域の家庭教師などを探してみたいと思います。ですので、もう少しだけお付き合いください(><)
0966デフォルトの名無しさん
2017/01/03(火) 02:22:21.02ID:MjeJ10xl>>958〜ではダメだろ?
分岐・分類がうまくできてないだろ。
どれか一つだけ入力されてたら1000にならないか?
0967デフォルトの名無しさん
2017/01/03(火) 02:26:53.48ID:MQ1FjY+hIf CheckBox1 Then
y = 500⑴
If CheckBox2 Then
y = 500 + 300⑵
ElseIf CheckBox3 Then
y = 500 + 200⑶
Else
y = 500 + 300 + 200⑷
End If
End If
⑴はcheckbox1にチェックが入ったとき計算
⑵はcheckbox1と2にチェックが入ったとき計算
⑶はcheckbox1と3にチェックが入ったとき計算
⑷はcheckbox1にチェックが入ったとき計算
単体のcheckbox1の条件でチェックが入った時点で⑴と⑷が実行されてしまうから変な計算になる
f8キーで1行ずつテストする癖をつけたほうがいい
Elseは英語で〜のほかにって意味だから
if 〜 then(もし〜なら)
elseif 〜 (ほかにもし〜なら)
みたいに、前に単体のifがないとエラー出る
コードは単純にシンプルな方が見やすい
vbaの家庭教師はいないと思うから、おそらく世界一詳しいGoogle先生に聞いた方が早いし安い
0968デフォルトの名無しさん
2017/01/03(火) 02:28:25.36ID:9Y8iTik6Private Sub CommandButton1_Click()
Dim myBox1 As Long
Dim myBox2 As Long
Dim mybox3 As Long
Dim y As Long
If CheckBox1 Then
myBox1 = 200
End If
If CheckBox2 Then
myBox2 = 300
End If
If CheckBox3 Then
mybox3 = 400
End If
y = myBox1 + myBox2 + mybox3
Label1.Caption = y
End Sub
0969デフォルトの名無しさん
2017/01/03(火) 02:33:04.36ID:MjeJ10xl0970デフォルトの名無しさん
2017/01/03(火) 02:39:10.88ID:MjeJ10xlif(A) {
if(B) {
// AかつBのとき
if(C) y=1000; else y = 500 + 300;
}
else {
// AかつBでないのとき
if(C) y=500+200; else y = 500;
}
}
else {
// AでないかつBでないのとき
if(C) y=200; else y = 0;
}
0971デフォルトの名無しさん
2017/01/03(火) 02:39:52.85ID:MjeJ10xl0972デフォルトの名無しさん
2017/01/03(火) 02:42:47.59ID:1zAQlgGHめんどくさいだけで なんのメリットもないぞ
If CheckBox1 Then
If CheckBox2 Then
If CheckBox3 Then
Y = 500 + 300 + 200
Else
Y = 500 + 300
End If
Else
If CheckBox3 Then
Y = 500 + 200
Else
Y = 500
End If
End If
Else
If CheckBox2 Then
If CheckBox3 Then
Y = 300 + 200
Else
Y = 300
End If
Else
If CheckBox3 Then
Y = 200
Else
Y = 0
End If
End If
End If
0973デフォルトの名無しさん
2017/01/03(火) 02:43:32.61ID:MjeJ10xlif(A) {
if(B) {
// AかつBのとき
if(C) y=1000; else y = 500 + 300;
}
else {
// AかつBでないのとき
if(C) y=500+200; else y = 500;
}
}
else {
if(B) {
// AでないかつBのとき
if(C) y=300+200; else y = 300;
}
else {
// AでないかつBでないのとき
if(C) y=200; else y = 0;
}
}
0974968
2017/01/03(火) 02:46:27.46ID:9Y8iTik6ごめん、よく分かってないのでコメント控えるけど、別にスレ的には良いんじゃないでしょうか。
そろそろ次スレ立ててくる。
0975デフォルトの名無しさん
2017/01/03(火) 02:53:18.87ID:9Y8iTik6Excel VBA 質問スレ Part45 [無断涛]載禁止]©2ch.net
http://echo.2ch.net/test/read.cgi/tech/1483379476/
0976デフォルトの名無しさん
2017/01/03(火) 02:53:39.98ID:r2luLCsmこうやって改変すりゃ答えになるから。
>チェックボックス1…500
>チェックボックス2…300
>チェックボックス3…200
↓↓↓
If チェックボックス1 Then A…500 Else A…0
If チェックボックス2 Then B…300 Else B…0
If チェックボックス3 Then C…200 Else C…0
ラベル1キャプション…A+B+C
もう961が似たような答え書いちゃってるけどね。
0977デフォルトの名無しさん
2017/01/03(火) 03:07:22.55ID:r2luLCsm>学校の課題がどうしてもできないのです。
>私の考え方で3つの合計数を出す方法はあるのでしょうか?
>もしくは、そもそも私の考えが間違っているので、表しようがないのでしょうか
そもそも、学校の課題で、何を求められているかで変わると思うけど。
何でも良いから答えを出せってことなら、>>961で終了。
0978デフォルトの名無しさん
2017/01/03(火) 03:14:21.95ID:1zAQlgGH回答は せめてVB系の構文で 書いてもらえるかな 質問者が混乱するから
0979デフォルトの名無しさん
2017/01/03(火) 03:20:02.02ID:3mqXOGxM皆様ご丁寧に解答して下さってありがとうございました。
967様の解答を聞いて、
・1にチェック→2or3にチェック→その他とは、1単体or123全てをチェック
・入れ子にしてしまうと1かつ2,1かつ3、1単体、というように1が絶対入ってしまうが、それぞれ独立したifにすると
1を選択orしなかった場合、2を選択orしなかった場合、3を選択orしなかった場合、というように抽象的な事象が同時に存在することがわかった。
・従って、それぞれの事象が同時に存在できることが新しく理解でき、また私の方法ではその他から1単体を切り離す作業が必要になりますので、適切ではなく、961様、965様のようなシンプルな解答になるのだということに行きつきました。
(ちゃんと理解できてますでしょうか…??)
もし合ってそうでしたら、皆さま非常に親切にご回答頂き、ありがとうございました。
またお世話になってしまう&ご迷惑をおかけしてしまう可能性が十分にあるのですが、その時はよろしくお願い致します。
0980デフォルトの名無しさん
2017/01/03(火) 05:54:17.23ID:/ZQ7wvWMすべての組み合わせは、2の3乗
1 2 3
F F F
F F T
F T F
F T T
T F F
T F T
T T F
T T T
0981デフォルトの名無しさん
2017/01/03(火) 08:17:52.06ID:KKVFl3k5質問スレなんだから質問が迷惑となることはない
気になることを聞けばいい
お前みたいにやりたい事と現状と自分の考えを述べてくれる質問なら回答側もやりやすい
0982デフォルトの名無しさん
2017/01/03(火) 11:14:55.29ID:wnrnHeuT0983デフォルトの名無しさん
2017/01/03(火) 22:42:43.33ID:v/nbA2QD0984デフォルトの名無しさん
2017/01/04(水) 06:09:09.73ID:a8j3oUUf0985デフォルトの名無しさん
2017/01/04(水) 09:05:25.75ID:/4cm7e5r0986デフォルトの名無しさん
2017/01/04(水) 11:17:19.55ID:QaTHv5+Zシートが7つあって、全シートのB3にToDoを書き込むセルがあります。
どのシートのToDoを変更しても全てのシートのToDoが連動して変更されるようにしたいです。
コードを教えていただけないでしょうか。
0987デフォルトの名無しさん
2017/01/04(水) 11:57:23.66ID:zmi2V8Wc目的はよしとして
より具体的に動作を表現して。
0988デフォルトの名無しさん
2017/01/04(水) 11:58:47.15ID:0ISnzSv/Private Sub Worksheet_Change(ByVal Target As Range)
Dim Sheet As Worksheet
Application.EnableEvents = False
If Target.Address = "$B$3" Then
For Each Sheet In ActiveWorkbook.Worksheets
If Not ActiveSheet Is Sheet Then
Sheet.Range(Target.Address).Value = Target.Value
End If
Next
End If
Application.EnableEvents = True
End Sub
0989デフォルトの名無しさん
2017/01/04(水) 12:09:38.67ID:0ISnzSv/0990デフォルトの名無しさん
2017/01/04(水) 12:11:00.06ID:QaTHv5+Z>>988
全シート反映でうまくいきました。
大変助かりました。
ありがとうございます。
0991デフォルトの名無しさん
2017/01/04(水) 17:37:41.78ID:HpCJaqNh0992デフォルトの名無しさん
2017/01/04(水) 18:47:36.88ID:DnLPHx3K0993デフォルトの名無しさん
2017/01/04(水) 19:04:14.05ID:S3/LF5h50994デフォルトの名無しさん
2017/01/05(木) 11:48:17.32ID:gvhgNrtK0995デフォルトの名無しさん
2017/01/05(木) 12:58:45.55ID:rordfoes0996デフォルトの名無しさん
2017/01/05(木) 13:54:27.06ID:p9OTJbgP0997デフォルトの名無しさん
2017/01/05(木) 13:54:43.65ID:p9OTJbgP0998デフォルトの名無しさん
2017/01/05(木) 14:05:52.06ID:3kVSXnTB0999デフォルトの名無しさん
2017/01/05(木) 14:12:04.11ID:K3UYemjT1000デフォルトの名無しさん
2017/01/05(木) 14:12:22.11ID:K3UYemjT10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
life time: 48日 6時間 47分 40秒
10021002
Over 1000Thread運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 2ちゃんねる専用ブラウザからの広告除去
★ 2ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
http://premium.2ch.net/
▼ 浪人ログインはこちら ▼
https://login.2ch.net/login.php
レス数が1000を超えています。これ以上書き込みはできません。