Excel VBA 質問スレ Part36 [転載禁止]©5ch.io
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2015/01/09(金) 16:59:02.80ID:GzFHQ3J4★1 質問テンプレ(雛形)は用意しませんが、OSとExcelのバージョンは必ず書きましょう。
★2 ExcelのVBA以外の部分に関する質問はNGです。
但し、VBA無しでも出来ることだが、あえてVBAでやりたいって物に関してはOK。
★3 ExcelのVBE(Visual Basic Editor)を使うとしても、VBAの分野以外に関してはスレ違いです。
VBAとは、『Visual Basic for Applications』の略で
Application
├Workbooks
|└Workbook
| ├Worksheets
| |└Worksheet
というApplication以下のオブジェクトを、VB言語で操作するものを指します。
例えExcel付属のVBE(Visual Basic Editor)を利用しようとも、このApplication以下のブックやシート、
セルやオブジェクト等を操作するもの以外はVBA分野の話ではないので、ここでは聞かないでください。
★4 とりあえず、Excelのインスタンスを作らずにVB6で出来ることは全てスレ違いだと思ってください。
★5 レベルはどうあれ、ここはプログラマ用の板スレです。プログラマとは、自分でプログラムを組み、
コードを書く人の事なので、自分でやるきは全く無く、丸投げしようって人はお断りです。
ヒントを貰えばあとは自力でなんとかしますって人のみどうぞ。
★6 わからなければとりあえず「マクロの記録」(Alt, T, M, R)
前スレ:Excel VBA 質問スレ Part35
http://peace.2ch.net/test/read.cgi/tech/1414186311/
関連スレ:VBAなんでも質問スレ
http://toro.2ch.net/test/read.cgi/tech/1342087380/
0002デフォルトの名無しさん
2015/01/09(金) 17:00:05.94ID:GzFHQ3J402 http://pc11.2ch.net/test/read.cgi/tech/1168308855/
03 http://pc11.2ch.net/test/read.cgi/tech/1180192018/
04 http://pc11.2ch.net/test/read.cgi/tech/1189814602/
05 http://pc11.2ch.net/test/read.cgi/tech/1197448064/
06 http://pc11.2ch.net/test/read.cgi/tech/1205231499/
07 http://pc11.2ch.net/test/read.cgi/tech/1212587819/
08 http://pc11.2ch.net/test/read.cgi/tech/1219673793/
09 http://pc11.2ch.net/test/read.cgi/tech/1228372971/
10 http://pc12.2ch.net/test/read.cgi/tech/1235332603/
11 http://pc12.2ch.net/test/read.cgi/tech/1241885130/
12 http://pc12.2ch.net/test/read.cgi/tech/1247566074/
13 http://pc12.2ch.net/test/read.cgi/tech/1254281104/
14 http://pc12.2ch.net/test/read.cgi/tech/1262748898/
15 http://pc12.2ch.net/test/read.cgi/tech/1271261239/
16 http://hibari.2ch.net/test/read.cgi/tech/1280045912/
17 http://hibari.2ch.net/test/read.cgi/tech/1289182437/
18 http://hibari.2ch.net/test/read.cgi/tech/1298240666/
19 http://hibari.2ch.net/test/read.cgi/tech/1305754555/
20 http://hibari.2ch.net/test/read.cgi/tech/1312435844/
0003デフォルトの名無しさん
2015/01/09(金) 17:00:35.92ID:GzFHQ3J422 http://toro.2ch.net/test/read.cgi/tech/1322400978/
23 http://toro.2ch.net/test/read.cgi/tech/1327763113/
24 http://toro.2ch.net/test/read.cgi/tech/1334305148/
25 http://toro.2ch.net/test/read.cgi/tech/1341722983/
26 http://toro.2ch.net/test/read.cgi/tech/1345363310/
27 http://toro.2ch.net/test/read.cgi/tech/1353842387/
28 http://toro.2ch.net/test/read.cgi/tech/1359607536/
29 http://toro.2ch.net/test/read.cgi/tech/1364689772/
30 http://toro.2ch.net/test/read.cgi/tech/1370088822/
31 http://toro.2ch.net/test/read.cgi/tech/1376371376/
32 http://toro.2ch.net/test/read.cgi/tech/1381151995/
33 http://peace.2ch.net/test/read.cgi/tech/1382015080/
34 http://peace.2ch.net/test/read.cgi/tech/1403911485/
35 http://peace.2ch.net/test/read.cgi/tech/1414186311/
0004デフォルトの名無しさん
2015/01/09(金) 17:28:33.56ID:BcP6vX0h正しい次スレはこちらです
http://peace.2ch.net/test/read.cgi/tech/1419718732/l50
0005デフォルトの名無しさん
2015/01/10(土) 23:41:25.43ID:xy8zfnqHメモ張から見てわかりますでしょうか
0006デフォルトの名無しさん
2015/01/11(日) 02:32:30.02ID:RQUzAnWcこのスレはテンプレが絶対です。
あなたの質問は>>1★2に抵触します。
VBAの質問で無ければ例え雑談と言えどもスレ違いとなりますので、他でやって下さい。
0007デフォルトの名無しさん
2015/01/11(日) 13:10:14.57ID:tSIQw0Ly今はなにかしらのコーディングがされてるはず
0008デフォルトの名無しさん
2015/01/11(日) 15:49:05.34ID:FbuCuKO8フォルダ選択画面を出してファイル選択をしたいんだか、
そんなツールボックスってある?
0009デフォルトの名無しさん
2015/01/11(日) 16:01:58.35ID:KxuOmHMJ0010デフォルトの名無しさん
2015/01/12(月) 11:15:48.18ID:RtAs6kiOThanks!
これを使えばユーザーフォームのコントロール(ツールボタン?)から
CommandButtomでファイル名選択、取得出来ることはわかったんですが、
CommandButtom以外にエクスプローラのような形式で選択できる
コントロールフォームはあるのですか?
0011デフォルトの名無しさん
2015/01/12(月) 13:03:43.73ID:b1cfo7LIファイルをセーブするのに GetSaveAsFilename
0012デフォルトの名無しさん
2015/01/12(月) 14:23:59.22ID:RtAs6kiOラージャー
今休日作戦実施中だがなにせ二等兵の見習いなんで。。。
イメージとしては、ユーザホーム上でフォルダーやファイルを選択する
ボタンやリストを乗っけて、そこからフォルダー名、ファイル名をを取得して、
選択したファイルに対して、行数カウントやらセル値操作をするボタンを
乗っけるというイメージ
(いろいろファイルを選択して、最後はOKボタンで処理実行のイメージ)
前段の
> フォルダを選択するのに FileDialog
> ファイルをセーブするのに GetSaveAsFilename
はなんとかできそうなんですが、
これらから取得した変数を次のフォーム(CommandButtom等)に引き渡せないでござる。
どうしてもだめならば、一つのボタンで、全処理実行した方いいかな。。。
0013デフォルトの名無しさん
2015/01/12(月) 14:41:53.61ID:fKsWZoh+0014デフォルトの名無しさん
2015/01/12(月) 15:21:26.81ID:RtAs6kiOpublic finenam01 As String
ってな感じで
いくつかの
sub xxxxxxx ()
End Sub
内でまたいで使用するってな感じでよろしいでんがな?
0015デフォルトの名無しさん
2015/01/12(月) 16:23:20.27ID:32vMhpLcAのエクセルブックには更新の起点となるVBAマクロがあります。
A〜Zには他のエクセルのセルやシートを参照したり変更したりしている状態になっています。
こういった状態の相関関係が複雑になってしまっているものを、チャート化するようなVBAマクロってないですか?
0016デフォルトの名無しさん
2015/01/12(月) 16:33:37.49ID:32vMhpLcどこのエクセルマクロがどこをいじって、その結果どこが影響を受けて・・・というのを
0017デフォルトの名無しさん
2015/01/12(月) 16:43:32.25ID:b1cfo7LI0018デフォルトの名無しさん
2015/01/13(火) 11:52:36.91ID:lD3kwP9C言いたいことは分かったけど
そういう機能を備えたVBAマクロが存在してるかどうかは知らない
(世界中で色んな人が色んなマクロ作ってるんだから、
どこにどんなマクロが存在しているのかなんて誰にも分るわけがない)
自前で作る事は理論上は可能だと思うけど、俺にはできない
小規模なものならできるだろうけど、
例えばひとつのブックが他のブックから数万セルの参照を受けてる、
それが数十個ある、みたいな場合に
全体の状況をチャート化するとかとてもじゃないが無理
0019デフォルトの名無しさん
2015/01/13(火) 15:44:10.28ID:HMyF52zP0020デフォルトの名無しさん
2015/01/13(火) 19:03:56.97ID:JHzht5gPそれをEXCEL VBAで複数ブック対応でグラフィカル表示出来ればいいんだろ
まあ、探せば誰か作ってるかもしれん
0021デフォルトの名無しさん
2015/01/13(火) 23:15:59.28ID:NDl0wVUrAccessだとそんな感じのツールは見かけたことがある。
0022デフォルトの名無しさん
2015/01/14(水) 20:42:54.30ID:uhw4RigZA B C D E
1 あ い う え お
2 か き く け こ
3
4
こういうシートがあったとします。
この場合一番最後の行は2行目ですが、別シートからの文章を、
一番最後の行からさらに指定した行の下に持って期待と思っております
例えば【最後の行から1行下に「さしすせと」と入力】と行った場合、
図の4行目に「さしすせそ」が入力されるといった具合です。
こういった「指定したシートの一番最後の行から、さらに指定した行を空けて文章を
入力する、持ってくる」ことができるようなメソッドはありますでしょうか?
わかりづらかったら申し訳ありません。
指摘して頂ければお答えいたします。よろしくお願いいたします。
0023デフォルトの名無しさん
2015/01/14(水) 21:43:19.63ID:zsXJlWOxlastrow = Cells(Rows.Count, "A").End(xlUp).Row
で出来る
後はそういうロジックを自分で作ればいい
0024デフォルトの名無しさん
2015/01/15(木) 08:01:20.21ID:2+tcuFL8Range(Cells(3, 1), Cells(LastRow, 7)).Copy Range(Cells(3, 1), Cells(LastRow, 7)).Insert
と書いて実行してもエラーが出ます
Rows("3:LastRow").Copy Rows("3:LastRow").Insert
行コピーでもいいんですが、やはりエラーが出ます
0025デフォルトの名無しさん
2015/01/15(木) 17:08:28.33ID:TM6j+YgZまあ「: 」(コロン)でつないでやればできるけど
ただ、コード見る限りセル範囲Aの真下に同じものを複製したいだけで、セル範囲Aの下にデータはないみたいだから
copyしてinsertなんてせずに、
Cellsの引数のLastRowをLastRow+1にするなり
コピー元のセル範囲を変数に入れといてそれをoffsetするなり
したセル範囲に代入するのがいいんじゃない
0026デフォルトの名無しさん
2015/01/15(木) 20:08:01.85ID:0Z20SaSZ0027デフォルトの名無しさん
2015/01/15(木) 21:27:14.27ID:oKiGnD+ESub 請求書作成()
Dim i As Integer
Dim Cnt As Integer
Dim Kokyaku As String
Cnt = 12
Kokyaku = "A商事"
Worksheets("請求書雛形").Copy After:=Worksheets(Worksheets.Count)
Worksheets(Worksheets.Count).Name = Kokyaku
Worksheets(Kokyaku).Range("A6").Value = Kokyaku
Worksheets(Kokyaku).Range("E2").Value = Date
For i = 4 To 32
If Worksheets("販売").Cells(i, 2).Value = Kokyaku Then
Worksheets(Kokyaku).Cells(Cnt, 1).Value = Worksheets("販売").Cells(i, 1).Value
Worksheets(Kokyaku).Cells(Cnt, 2).Value = Worksheets("販売").Cells(i, 3).Value
Worksheets(Kokyaku).Cells(Cnt, 3).Value = Worksheets("販売").Cells(i, 4).Value
Worksheets(Kokyaku).Cells(Cnt, 4).Value = Worksheets("販売").Cells(i, 5).Value
Worksheets(Kokyaku).Cells(Cnt, 5).Value = Worksheets("販売").Cells(i, 6).Value
End If
Next i
End Sub
これでオブジェクトエラーが生じるんですけど、何故だかわかりますか?
一応参考書どおりなはずなのですが・・・
0028デフォルトの名無しさん
2015/01/15(木) 23:22:06.84ID:zINY+dXI0029デフォルトの名無しさん
2015/01/16(金) 09:09:55.19ID:xsGnLZU7ファイル -> オプション
で開くウインドウをVBAで表示させることは出来ますか?
0030デフォルトの名無しさん
2015/01/16(金) 09:20:15.90ID:vvO7Vwb+Rows("12:15").Select って
何が違うの?
0031デフォルトの名無しさん
2015/01/16(金) 12:51:04.35ID:iLAQhcb3その使い方だと結果は変わらない。が、
Range("12:15")(1).Select
Rows("12:15")(1).Select
って感じにやると結果が変わってくる。
また、Rowsで返されたものは行単位以外での絞り込みができなかったり。
ちなみにCellsプロパティを介せば一般的なRangeに戻すことができる。
0032デフォルトの名無しさん
2015/01/17(土) 08:28:37.34ID:j2k9zBKyこの状態で別の自作のアプリ(c++、c#,vbなどなんでもよい)からそのexcelに対してvbaの関数を
実行するように指示を送るような方法は有りますか?
0033デフォルトの名無しさん
2015/01/17(土) 09:44:55.34ID:pPtCgDJH既に起動されてるEXCELだとそのオブジェクトを認識出来れば操作可能と思われる
0034デフォルトの名無しさん
2015/01/17(土) 10:34:27.93ID:j2k9zBKy>既に起動されてるEXCELだとそのオブジェクトを認識出来れば操作可能と思われる
その具体的な方法が知りたいのですが、ヒント教えて下さい。
0035デフォルトの名無しさん
2015/01/17(土) 11:55:05.34ID:gnkFi13QAPIならCoGetClassObject辺りか?
0036デフォルトの名無しさん
2015/01/17(土) 12:24:39.93ID:EcNq8Nj3操作したい言語毎にやり方が違うんで、
excel C#
のように、excelと言語名でぐぐれば出てくる
0037デフォルトの名無しさん
2015/01/17(土) 13:55:33.92ID:MaJzmOfhRows("8:15").Select
D列からF列までを選択するのをマクロの記録だと
Columns("D:F").Select
となるんですが、
これを変数を用いて範囲指定出来るようにしたい
どうすれば良いでしょうか
0038デフォルトの名無しさん
2015/01/17(土) 14:04:37.65ID:pPtCgDJHRowEnd=15
Rows(RowStart & ":" & RowEod).select
こんな意味?
0039デフォルトの名無しさん
2015/01/17(土) 14:16:54.43ID:MaJzmOfhありがとう
ついでに列の指定を教えてください
同じように
colStart = 2
colEnd = 5
Columns(colStart & ":" & colEnd).Select
としてみたら
アプリケーション定義またはオブジェクト定義のえらーです。
となりましたorz
0040デフォルトの名無しさん
2015/01/17(土) 14:24:25.49ID:pPtCgDJH0041デフォルトの名無しさん
2015/01/17(土) 14:30:53.52ID:MaJzmOfh感謝です!
0042デフォルトの名無しさん
2015/01/17(土) 14:34:15.75ID:pPtCgDJH0043デフォルトの名無しさん
2015/01/17(土) 17:28:25.92ID:hqZjO6ML0044デフォルトの名無しさん
2015/01/17(土) 18:48:46.62ID:bx3UtG1oドラクエの魔法を唱えたときのように
画面全体がピカッと光るようにしたいんですが
どうしますか?
0045デフォルトの名無しさん
2015/01/17(土) 19:16:52.52ID:ZQUumRCvパルプンテ
0046デフォルトの名無しさん
2015/01/17(土) 19:58:13.44ID:gEqaKlFU0047デフォルトの名無しさん
2015/01/18(日) 02:21:02.84ID:wo+YRjYB0048デフォルトの名無しさん
2015/01/18(日) 03:30:36.60ID:gjAl9y8i任意の数の数字にするにはどうしたら良いですか?Likeで表現出来ますか?
0049デフォルトの名無しさん
2015/01/18(日) 04:35:13.10ID:nKsy5XPl0050デフォルトの名無しさん
2015/01/18(日) 06:26:22.69ID:1pf3AaGolike句はググって出ないならないんじゃないかな。知らないけど。
regexpをグローバルで用意して、使いやすいように関数にしておけばいいよ
0051デフォルトの名無しさん
2015/01/18(日) 14:47:21.05ID:8CHX/Z2W指定したシートのセルの罫線を取得する
Dim bs As Borders
Set bs = Range("A1").Borders
http://www.tipsfound.com/VBA/07010.vbhtml
指定したシートのセルに罫線を設定する
Dim bs As Borders
Set bs = Range("A1").Borders
とあるのですが、よくわかりません
何をしたいのかというと、罫線のみのコピー&ペーストです
あるセルの罫線を「取得」してこれを変数bsに格納
そしてこのbsを使って別のセルに罫線を「設定」しようと思っているのですが
取得も設定も同じ説明になっていてよくわかりません
こういった方法ではできないのでしょうか
0052デフォルトの名無しさん
2015/01/18(日) 15:20:23.02ID:nKsy5XPl3行目のbs.LineStyle = のとこで設定
0053デフォルトの名無しさん
2015/01/18(日) 19:43:14.12ID:7UXmT3Sg例えばEXCEL2010を起動した時に、他にもEXCEL2010やEXCEL2013の
プロセスが実行中かどうか知る方法はありますか?
プロセスの取得自体なら出来そうですが、その中にEXCEL.EXEがあった
として、それが2010なのか2013なのか、どうやれば区別できるのか
分りません。良いアディアが有れば教えて下さい。
0054デフォルトの名無しさん
2015/01/18(日) 19:58:55.01ID:ENvWPWHOEXEのフルパスさえ取れれば何とかなるでしょ。
0055デフォルトの名無しさん
2015/01/19(月) 02:34:29.99ID:aeY3ubQM$p = get-process TeraPad
$p.Name
TeraPad
$p.Description
TeraPad
$p.FileVersion
1.0.9.0
$p.Path
C:\Users\Owner\Desktop\TeraPad109\TeraPad.exe
デスクトップに置いている
$p.Product
TeraPad
$p.ProductVersion
1.09
0056デフォルトの名無しさん
2015/01/19(月) 10:35:13.92ID:wwRTBdF8このA()である処理をさせて、途中でボタン付きのフォームを出して
押したボタンによってある座標に文字を記入させようとしたいんだけど
フォームのボタンを押した時の処理って、
フォーム→名前入力フォーム の中のプロシージャ Private Sub Button1_click()でやるんだよね
これってA()の途中で 名前入力フォーム.Show でフォームを出して Private Sub Button1_click() に飛ぶんだけど
ここではA()で求めた座標の情報が無いから入力できない
A()の座標情報を飛ばそうと思って、Public Sub Button1_click()にして
Call Form_名前入力フォーム.Button1_click()で呼び出してもエラーが出るし
どうしたらいいの?
005756
2015/01/19(月) 10:37:07.07ID:wwRTBdF8Call Form_名前入力フォーム.Button1_click(n)で呼び出してもエラーが出るし
0058デフォルトの名無しさん
2015/01/19(月) 10:45:04.98ID:Kmrk/czY・フォームコントロール
・ActiveXコントロール
と2つあってそれぞれほぼ似たようなものが入ってます。
どっち使うのが得策ですか?
こういうのは決まって最初はどちらかがオリジナルだけどあとで最新技術かなにかで古いほうは奨励されないけど互換性のためそのまま残している、
というストーリーが想像されます。
そういうのも含めて似たようなものが2つある理由を詳しく教えていただけませんか?
0059デフォルトの名無しさん
2015/01/19(月) 11:18:59.82ID:Kmrk/czYオブジェクト変数に何かを代入するのは簡単です。
Set オブジェクト変数=(なんかのオブジェクト)
とすればいいだけです。
ではオブジェクト変数に入ってるものを取り出すにはどうやるのですか?
例えば1つのセルで超カッコいいフォントを使ってるので
Dim 超イイフォント as Object
Set 超イイフォント=Cells(1,1)
とお気に入りのフォントを用意しておき
それを他のセルにも適用したいときに使いたいんです。
0060デフォルトの名無しさん
2015/01/19(月) 11:20:01.79ID:Kmrk/czYSet 超イイフォント=Cells(1,1).Font
0061デフォルトの名無しさん
2015/01/19(月) 11:25:30.86ID:Kmrk/czYFontのメンバのうちName、Size、Boldとかは引き継がれるけどColorは引き継がれない。
0062デフォルトの名無しさん
2015/01/19(月) 12:32:28.37ID:Wmpd31BHとりあえず簡単な方法は
module1にPublicな変数を定義してフォームモジュールからはmodule1.変数名でアクセス
>>59-61
取り出しは違うものに代入するだけだから代入と同じ
ただし、Range.Fontは読み取り専用だからFontそのものに代入はできない
個々のプロパティを代入してやれば同じ見た目になるだろ
Colorが引き継がれないっぽいのは、セルの色はRange.Fontじゃなくて
Range.Characters.Fontで文字ごとに設定されてるからじゃないかと
006356
2015/01/19(月) 14:34:01.47ID:wwRTBdF8モジュールレベルでの宣言じゃなくて
プロシージャレベルの宣言だけでもっとスマートにできるやり方ないですか?
0064デフォルトの名無しさん
2015/01/19(月) 16:55:15.01ID:IywTVsIeDim s as String = "初期値"
みたいな初期化は出来ないのでしょうか?
0065デフォルトの名無しさん
2015/01/19(月) 17:03:35.69ID:Wmpd31BHプロシージャレベルの宣言ってことは、そのプロシージャ以外からは一切関知しませんって宣言だぞ
標準モジュールに変数定義するのがいやなら、フォーム(モジュール)にPublicで定義してもいいけど
その場合はフォームの寿命とかインスタンスとか意識しないとダメ
0066デフォルトの名無しさん
2015/01/19(月) 17:06:38.16ID:Wmpd31BHVBAでは出来ない
試せばすぐわかるだろう
0067デフォルトの名無しさん
2015/01/19(月) 20:18:04.03ID:vqISfLuNグラフのプロットエリアのサイズ指定処理である時別な条件で実行時エラーがでる。
エラーがでる部分の実際のコードはこんな感じ。グラフエリアは問題なく,プロットエリアのみ発生。
With .Chart.PlotArea
.Left = L <---この行で.Widthでもエラーになる。Leftメソッドが失敗しましたとか。
.Width = W
・・・
End With
特別な条件とは以下の通り。
1.Excelファイルをオープンした直後の1回目の処理のみ。(エラー後2回目は正常処理)
2.オープン直後の表示領域に特定の部分が表示されていない場合のみエラー発生。
スクロールで特定場所を一度でも画面表示した場合はエラー発生しない。
3.グラフAとBがあり,先に処理するAでは発生せず後で処理するBのみ発生。
特定の領域とはグラフAのグラフエリア下端直線部。
それなら、マクロでスクロールとかすればと思うが,表示させないとエラーとなる。
Application.ScreenUpdating = False <---これがあるとだめ。
何がおこっているのかさっぱりわからない。誰かHELP。
0068デフォルトの名無しさん
2015/01/19(月) 20:32:30.07ID:rJO98qYq0069デフォルトの名無しさん
2015/01/19(月) 20:32:58.06ID:tiLe1QF5>With .Chart.PlotArea
これって更に上位に With あるの?
0070デフォルトの名無しさん
2015/01/19(月) 20:46:42.77ID:soodl7cW0071デフォルトの名無しさん
2015/01/19(月) 20:49:54.89ID:vqISfLuN3台のPCですべてだめ。win7 64bitもある。
>>69
もちろんある。こんなの。
With Sheets(1).ChartObjects(Obj)
・・・
End with
0072デフォルトの名無しさん
2015/01/19(月) 20:57:36.71ID:vqISfLuN全部は無理。前段でこんな処理しているがまずいかな。
With Sheets(1).ChartObjects(Obj).Chart
With .Axes(xlValue)
.TickLabels.AutoScaleFont = False
.TickLabels.Font.Size = 10
End With
With .Axes(xlCategory)
.TickLabels.AutoScaleFont = False
.TickLabels.Font.Size = 10
End With
End With
グラフエリア下端は目盛の表示エリアでもあるが???
0073デフォルトの名無しさん
2015/01/19(月) 21:03:35.88ID:rJO98qYqじゃあ再現可能な最小コードを作ってアップロードの流れだね
家のPCエクセル入ってないからおれは見れないけど鼻ほじ
0074デフォルトの名無しさん
2015/01/19(月) 21:05:10.90ID:soodl7cW0075デフォルトの名無しさん
2015/01/19(月) 21:19:45.00ID:vqISfLuNデフォルトのオブジェクトプロパティーはソースコードには書いてないし,
チャートオブジェクトは数千行のソースコードの中で随時操作している。
>>74
別に何でもない。代入している変数名は省略。
そもそも99%は正常に動作するのでこの部分ではわからない。
指定の順序に問題があるかもしれないが..
With Sheets(1).ChartObjects(Obj)
.Left =
.Top =
.Width =
.Height =
With .Chart.PlotArea
.Format.Line.Weight = 0.5
.Left =
.Width =
0076デフォルトの名無しさん
2015/01/19(月) 21:46:02.74ID:vqISfLuN問題の本質は画面スクロールするだけでなぜエラーが発生しなくなるのかということ。
ソースコードの初期化でもなく,エクセル自体の内部変数の問題と予想。
どこかの,何かのプロパティを初期設定する必要があるのかもしれない。
0077デフォルトの名無しさん
2015/01/19(月) 22:10:47.46ID:Wmpd31BHグラフオブジェクト、ある種のエラーとか2回目以降は握りつぶしてるぞ
0078デフォルトの名無しさん
2015/01/19(月) 23:56:47.69ID:FlOINZHK0079デフォルトの名無しさん
2015/01/19(月) 23:58:25.47ID:FlOINZHK視力も落ちてきたし
0080デフォルトの名無しさん
2015/01/20(火) 05:15:26.62ID:iuLmkOeX自分で当たり前と思ってる事が…
0081デフォルトの名無しさん
2015/01/20(火) 05:21:25.00ID:iuLmkOeX1.発生してるイベント名
2.正確なエラーメッセージ
3.With .Chart.PlotAreaは参照出来るか
4..Left = Lは参照出来るか
自分で解決出来ないんだから自分で怪しいと思った事ではなくて、まず何が起きているか他人が客観的に判断出来る情報だけを提示しような
0082デフォルトの名無しさん
2015/01/20(火) 06:19:40.78ID:6mGj69QS正確なエラーメッセージは以下の通り。
実行時エラー ' -2147467259 (80004005)':
'Left' メソッドは失敗しました:'PlotArea'オブジェクト
Widthと行を入れ替えるとWidthのエラーとなる。
エラーストップしても,最初から再実行するとエラーは2度と出ない。
ユーザーがグラフを移動したりサイズ変更した場合を想定して,
元の位置とサイズに再設定するマクロになっている。
なので,マクロ実行時にはグラフは存在している。線と目盛を
書き変えるマクロ。
0083デフォルトの名無しさん
2015/01/20(火) 07:00:04.66ID:iuLmkOeX当面的に無理やり通すならresumeかgoto駆使する
あとは、workbook.loadイベントでワザとエラー発生させとくとか
0084デフォルトの名無しさん
2015/01/20(火) 07:06:38.60ID:iuLmkOeXまだオブジェクトが認識されてないんでね?
0085デフォルトの名無しさん
2015/01/20(火) 08:41:20.38ID:dg0GDE71書けるようになってきた反面、破綻寸前です
0086デフォルトの名無しさん
2015/01/20(火) 09:05:42.56ID:tR2SZl1M初期値が入っていないのかも?
b
a=b
宣言だけして、初期化しなかった変数を使ってエラー
b=0 などと宣言と同時に、初期値が入っていれば、
エラーは起きない
0087デフォルトの名無しさん
2015/01/20(火) 09:23:54.97ID:GsFnMcAhだったら見られても分りにくくする難読化のツールありますか?
ググッてもVBA用のは無いようなのですが。
0088デフォルトの名無しさん
2015/01/20(火) 09:36:37.55ID:iwY+YMua0089デフォルトの名無しさん
2015/01/20(火) 11:00:46.84ID:GsFnMcAh一切出来なくなりますが、EXCELのウインドウの移動なども出来なくなり
不便なので、Ribbonの操作とか、セルの操作とか、そういうのだけ
禁止する方法ありますか?
0090デフォルトの名無しさん
2015/01/20(火) 11:16:17.35ID:h3ZK+Qpq例えばフォームで「会員No.XXXXを登録しますか?」と表示させて
その下のボタン、「登録」「保留」「キャンセル」を押して決めるとか
XXXXは指定のセルから数値を読み取るとか
0091デフォルトの名無しさん
2015/01/20(火) 11:34:42.01ID:jGkVNXKd俺と同じだw
今現在は一箇所のフォルダにファイル名_バージョン.xlsm xxxx_000080.xlsm etc
にしてるけど、
使いやすいバージョン管理システムを見てまわってるところw
0092デフォルトの名無しさん
2015/01/20(火) 12:56:00.67ID:9WW5KIHI0093デフォルトの名無しさん
2015/01/20(火) 14:49:13.72ID:hS3N5Hvvラベル使ってcaption変えればいいのては?
009490
2015/01/20(火) 17:42:27.69ID:h3ZK+Qpqそれだとナンバーを毎回手動で変えることになるんですか?
0095デフォルトの名無しさん
2015/01/20(火) 18:11:15.93ID:jGkVNXKdってことなんじゃ
0096デフォルトの名無しさん
2015/01/20(火) 19:30:26.59ID:6mGj69QSレスありがとう。
原因不明のままだが,下記のデバッグ用の一行を挿入したら,
エラーそのものが発生しなくなった。
With Sheets(1).ChartObjects(Obj)
.Left =
.Top =
.Width =
.Height =
With .Chart.PlotArea
.Format.Line.Weight = 0.5
A = .Left <---この一行を入れるとエラーが出なくなった。.WidthでもOK。
.Left = L
.Width =
結局,EXCEL内部データが初期化不十分で,プロパティ読みだし操作で
初期化されるものと思われる。
0097デフォルトの名無しさん
2015/01/20(火) 20:52:58.14ID:6mGj69QS自己レス
グラフのサイズ指定処理だが,一番最初に以下の処理で
画面ズームサイズを保存して一定値にしてからでないと,
グラフサイズが正確に指定できない。これもEXCELの不具合。
Z = ActiveWindow.Zoom
ActiveWindow.Zoom = 一定値
グラフサイズ指定処理
ActiveWindow.Zoom = Z
0098デフォルトの名無しさん
2015/01/20(火) 21:07:42.46ID:iwY+YMua現状では誰も信じないと思うよ。
0099デフォルトの名無しさん
2015/01/20(火) 21:18:01.98ID:6mGj69QS現象を報告しているのみ。ネットでも類似報告はある。
ただ,そういう経験がなけば無視すればよい。
0100デフォルトの名無しさん
2015/01/20(火) 22:16:47.34ID:Q1gKznlwここで不十分な報告しても何の役にも立たん
0101デフォルトの名無しさん
2015/01/21(水) 01:26:50.20ID:a4gaLSo8だからどのイベントか書けよ
0102デフォルトの名無しさん
2015/01/21(水) 02:50:37.26ID:Xic+hwyG"\(\(\+"とやってますけど、範囲を指定してエスケープするにはどうすれば良いですか?
0103デフォルトの名無しさん
2015/01/21(水) 02:51:32.80ID:Xic+hwyG連続するメタ文字"+()+"を正規表現でマッチさせたいとき
"\+\(\)\+"とやってますけど、範囲を指定してエスケープするにはどうすれば良いですか?
0104デフォルトの名無しさん
2015/01/21(水) 04:25:21.94ID:PQV/sDzoRegular Expression(正規表現) Part132ch.net
http://peace.2ch.net/test/read.cgi/tech/1415149975/
0105デフォルトの名無しさん
2015/01/21(水) 06:12:54.10ID:z33vr0gGフォームは使っていないからイベントは無関係。
0106デフォルトの名無しさん
2015/01/21(水) 08:42:51.44ID:a+GjDkiJやはりそうなるよね
数パターン個別にカスタマイズして、
あとで統合しようとすると意味不明になる
VBAしか触らないから、
よくわからん本気のツール導入も敷居が高いし
VBAだけでバージョン管理できたら良いのにと思う
0107デフォルトの名無しさん
2015/01/21(水) 09:08:28.10ID:G0jKgpERソースエクスポートしてテキストで管理って言ってたけど面倒くさそう
0108デフォルトの名無しさん
2015/01/21(水) 09:42:25.78ID:NByG1E6bSheet1のオブジェクトモジュールではなく、クラスモジュールとして
インポートされるんですが、これをSheet1のオブジェクトモジュールと
してインポートする方法はありますか?
要するにエクスポートしてインポートしたら、完全に元通りにしたいのです。
0109デフォルトの名無しさん
2015/01/21(水) 10:20:51.10ID:nNlZ8uj4http://jbbs.livedoor.jp/bbs/read.cgi/study/3729/1226114724/53
↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑
この掲示板に優秀な書き込みをして、総額148万円の賞金をゲットしよう!(*^^)v
0110デフォルトの名無しさん
2015/01/21(水) 12:49:32.86ID:CTKuHmCR> ネットでも類似報告はある。
url 書かない奴は、脳内と見なされてもしょうがない
0111デフォルトの名無しさん
2015/01/21(水) 13:03:28.22ID:vxIgxT3tたしか
エクスポート/インポート を自前で作らないと駄目じゃなかったかな
それか
インポート時に
1) 一旦クラスモジュールとして インポートして
2) Sheet1のモジュールへ コピペ
3) 1)のクラスモジュール削除
とかね
0112デフォルトの名無しさん
2015/01/21(水) 14:10:56.42ID:NByG1E6bレスありがとうございます。
教えていただいた二通りの方法は、VBAでプログラムを組めば自動的に
実行できますか?
それとも手作業でやるしかないでしょうか?
0113デフォルトの名無しさん
2015/01/21(水) 14:37:19.71ID:eny8H5q0http://d.hatena.ne.jp/jamzz/20131002/1380696685
EXCELファイル内のVBAプロジェクトのソース一式をエクスポートする
を見れば
0114デフォルトの名無しさん
2015/01/21(水) 15:03:39.62ID:vxIgxT3t多分VBAで可能なはず
職場は EXCEL2010だけど自宅は未だに EXCEL97なんで
現状 超古いEXCELでしか試せないのよ
これがまともに動けばこれの応用でできるとおもうけど
With ThisWorkbook.VBProject.VBComponents("sheet1").CodeModule
.InsertLines .CountOfLines, "'コメント"
Debug.Print .Lines(1, .CountOfLines)
End With
上を実行すると
sheet1のモジュールの最後に
'コメント
が追加されかつイミディエイト へソースが表示されるハズです
0115デフォルトの名無しさん
2015/01/21(水) 19:45:06.53ID:SYTiPYt80116デフォルトの名無しさん
2015/01/21(水) 22:05:43.84ID:ilOt01Hfテキストボックスが一番最後の行にスクロールしてくれない。
Textbox1.SetFocus
Textbox1.CurLine = Textbox1.LineCount-1
ではダメなんですかね?
0117デフォルトの名無しさん
2015/01/21(水) 22:06:32.26ID:NByG1E6b情報有難うございます。
ちょっと試してみます。
0118デフォルトの名無しさん
2015/01/22(木) 09:30:51.95ID:4WNaJbbRIf A Is Nothing Then Exit Sub
Else A.Select
Cells(ActiveCell.Row, ActiveCell.Column + 1).Value = Date
この処理で、検索して見つかったらそのセルを選択して、
その後アクティブセルからいくつか移動したセルに日付を入れてるんだけど
選択→その位置から移動 の2回の処理をオブジェクト変数Aを使って1回で処理したいんだけど
どうしたらいい?
0119デフォルトの名無しさん
2015/01/22(木) 09:36:06.38ID:vsxHNAsjとか
A.offset(略 = 略
とか
0120デフォルトの名無しさん
2015/01/22(木) 09:38:23.54ID:vsxHNAsjいやend ifも要らないか
0121デフォルトの名無しさん
2015/01/22(木) 11:44:29.12ID:4WNaJbbR0122デフォルトの名無しさん
2015/01/22(木) 14:09:02.53ID:4WNaJbbR生産課 山田太郎 様
技術開発課 田中次郎 様
総務課 鈴木 様
...
フォームのテキストボックスに苗字を入力して、ボタンを押したら
別のテキストボックスに一致するセルの中身を出すようにしたいんだけど
同じ苗字が二人以上いる時に、まとめて抽出するにはどうしたらいい?
findで範囲内で一致するもの全てを同時に返すとかできますか?
0123デフォルトの名無しさん
2015/01/22(木) 18:52:36.11ID:dmH5GNro0124デフォルトの名無しさん
2015/01/22(木) 20:19:58.26ID:vNSjR/4efindはダメだろ
普通にfor nextとかで繰返し一致する名前を全て書き出せばいい
0125デフォルトの名無しさん
2015/01/22(木) 22:23:31.11ID:+1w7MZS/0126デフォルトの名無しさん
2015/01/22(木) 23:04:07.41ID:DV1cEPLZなにそれ?
ろくでなし子さん?
0127デフォルトの名無しさん
2015/01/22(木) 23:22:43.93ID:dmH5GNro0128デフォルトの名無しさん
2015/01/23(金) 06:06:36.11ID:lAQTOxJ2そもそも知識無いの丸わかり(笑)
0129デフォルトの名無しさん
2015/01/23(金) 08:10:55.33ID:db6c84vZ句読点にカンマ使うような低脳には誰も答えないよ
0130デフォルトの名無しさん
2015/01/23(金) 21:06:11.71ID:2WOFIePMCallをつけるのとつけないのではどちらが好ましいの?
0131デフォルトの名無しさん
2015/01/23(金) 21:42:06.36ID:QWMFiZg9これを懸念するなら Call 付けた方が好ましい
0132デフォルトの名無しさん
2015/01/23(金) 23:11:44.56ID:2WOFIePMそりゃ間違えそうになるけど変数ならどっかに=があるから区別つくでしょ。
0133デフォルトの名無しさん
2015/01/23(金) 23:54:43.14ID:9aT4HWHH間違える事がなくなるわけでしょ w
0134デフォルトの名無しさん
2015/01/24(土) 00:33:33.63ID:qV60IszQ0135デフォルトの名無しさん
2015/01/24(土) 03:13:55.66ID:4KWVQwlI0136デフォルトの名無しさん
2015/01/24(土) 04:10:03.61ID:3QTKI0dL明示的に戻り値無視したいときにCallで呼んだりせんのかね
0137デフォルトの名無しさん
2015/01/24(土) 06:25:07.60ID:bCSfcL8Kんで、()は付けたい派だからcall無しはナイなあ
call無し呼び出しの利点って何?
0138デフォルトの名無しさん
2015/01/24(土) 06:27:04.33ID:bCSfcL8Kあんま深く考えてないや
0139デフォルトの名無しさん
2015/01/24(土) 08:02:47.97ID:qV60IszQ>>130がどんなシチュエーションか分からんから商用向けで書いたんだが、
要求仕様にアプリが落ちない事ってのが多いから、余程でない限り各functionにエラー処理と戻り値チェックは必須化してるよ
簡易ツールは超適当だが
0140デフォルトの名無しさん
2015/01/24(土) 08:27:29.74ID:vmC8k43Y0141デフォルトの名無しさん
2015/01/24(土) 09:35:40.00ID:4KWVQwlIなるほどねぇ。昔は俺もそんな作りにしていたことがあったなぁ。
今は役割によって細分化してるから、そもそも落ちないメソッドが結構あるし、
落ちたときに必要な後処理によってOn Error Gotoをメソッドに書くか決めてる。
どのモジュールのどのメソッドで落ちたかはエラー情報モジュールを作っておいて、
全てのメソッドを実行する際に設定したり、実行時にログを出力したりしてる。
どっちがいいとかじゃないけど、全てのメソッドにOn Error Gotoとか付けるとテストケース作ったり、
テストするときに大変じゃない?
0142デフォルトの名無しさん
2015/01/24(土) 10:09:25.62ID:qV60IszQ処理によってエラー処理の有無を分けると必ず漏れるから規約で決める方が全体的に楽かな
エラーモジュールは後々便利だから俺もやるね
テストケースは整合性のある試験データを用意してもらって、かつ設計書で起こしてるから不要な試験はやらない感じ
あと、強制終了しない作りにしとけば納品後も言い訳立つから
0143デフォルトの名無しさん
2015/01/24(土) 10:55:09.87ID:nnj+BbUn小規模法人や個人事業者とかだと便利そうだな
0144デフォルトの名無しさん
2015/01/24(土) 11:30:02.39ID:6PENQCIF決算処理で発覚した障害や法改正時の対応とかで
「急いでくれ、○○までに!」
というのがあると足元見られるかもよ
0145デフォルトの名無しさん
2015/01/24(土) 11:51:30.03ID:XTk+0QY6おれんところ正規社員50人以上いるけど一人もいないんだけど。
俺多少できるけどバイトだし
0146デフォルトの名無しさん
2015/01/24(土) 11:55:13.16ID:ZhE/54TSアホばっかりの会社だな(ワラ
0147デフォルトの名無しさん
2015/01/24(土) 11:58:24.09ID:XTk+0QY6おれが何か作ってやるとワークシート関数とか数式とか使ってやってると思われるわ
説明面倒だから流してるけど
0148デフォルトの名無しさん
2015/01/24(土) 12:29:15.21ID:6PENQCIFいない
下手をするとPC使える人すら一人もいない
それに一人しかいないと辞められると困る状況に陥るから任せたくないな〜w
0149デフォルトの名無しさん
2015/01/24(土) 12:48:55.10ID:miZ0p/s9どうしても必要なら外注
内部は安上がりな事務処理要員
0150デフォルトの名無しさん
2015/01/24(土) 13:23:49.43ID:nnj+BbUn事務系だと経理にはいるかも知れないが
「VBA出来る」ってレベルだと1〜2パーセントじゃない?
オレは職場ではエクセルは殆ど出来ないことになってるw
0151デフォルトの名無しさん
2015/01/24(土) 14:24:00.95ID:aPP2OAcd具体的にはデザインが変わることを想定して
初期化位置や入力の位置を定数で持ちたいのだけど
代替案とかでもいいです
0152デフォルトの名無しさん
2015/01/24(土) 15:18:57.52ID:W3y8Uzfqデザインが変わるってのは、処理対象のシートのフォーマットが変わるって意味だとして…
自分は、その可能性がある場合、VBAの修正はいらないように、別シートに設定用シート作ってる。
「フォーマット変えたら、このシートのこの数字(開始列No.とか)修正してね〜」
で済むから。
コードではその設定シートに入ってるセルアドレスや、列No.、行No.を参照するようにしてる。
0153デフォルトの名無しさん
2015/01/24(土) 15:45:42.96ID:qV60IszQrange("名前")じゃダメ?
0154デフォルトの名無しさん
2015/01/24(土) 15:58:33.26ID:O9IWPZcG標準モジュールフォルダに一連の操作を行うモジュールが30個たまっているのですが
操作を倍増させるために丸々複製して5倍に増幅させようと考えていますが
1つ1つ複製するしか方法は無いのでしょうか?
30モジュールをフォルダにまとめてフォルダごと複製のような事はできないのでしょうか?
0155154
2015/01/24(土) 16:02:12.70ID:O9IWPZcG>操作を倍増させる → 一連の流れは同じでも異なるバリエイションの操作を5通り作ろうとしています。 コードが複雑化しているため変数をしこむより複製する方が速い感じです
0156デフォルトの名無しさん
2015/01/24(土) 16:16:04.54ID:0YrHFNJH間違えそうというか、パっと見で分かりにくいからって
関数名は全角日本語にしちゃってるのって自分だけ?
さらに変数も基本日本語にしてる
例えば、gyou とか row より 行 の方が分かりやすいんで・・・
ネットのサンプルプログラムでも
日本語使ってるのは見たことないですが、
日本語だと何かデメリットあるんでしょうか
何かあるなら変えようと思う
0157デフォルトの名無しさん
2015/01/24(土) 16:33:46.61ID:qV60IszQバリエーションを増やした時に内容が変わる変数をpublic化して、
バリエーション毎の呼び出し時に変数の値を再設定すれば
処理自体はほぼそのままに出来るかと
0158デフォルトの名無しさん
2015/01/24(土) 16:38:06.33ID:qV60IszQ日本語環境下(ms office 日本語版)のVBA以外の何かに移植する時に非常に困る
俺は最近変数は日本語使う様になったな
簡易ツール限定で
0159デフォルトの名無しさん
2015/01/24(土) 16:48:23.60ID:NK64dzTdそれは思ったが確か文字列リテラルも同様に制約受けるよな
だから好みの問題でいいんじゃね?
>>154
テストケース書くとパターン展開して150パターン(出来ねえよ!)なんて事は良くあるけど、まさかその150パターンをフラットに実装しようとしてるなら保守で死ぬぞw
0160デフォルトの名無しさん
2015/01/24(土) 16:54:42.28ID:LdIBiv/J> 日本語環境下(ms office 日本語版)のVBA以外の何かに移植する時に非常に困る
そんな機会あるの?
0161デフォルトの名無しさん
2015/01/24(土) 16:56:53.66ID:aPP2OAcdありがとうございます
名前の定義はあまり使いたくなかったので
設定シート案採用させていただきます
お二人とも親切にありがとう
0162デフォルトの名無しさん
2015/01/24(土) 17:12:53.59ID:qV60IszQ>>156の環境と未来は本人しかわからないから本人に判断してもらう
俺は今後も日本語変数使うと思う
めっちゃ楽や〜
0164デフォルトの名無しさん
2015/01/24(土) 18:17:27.25ID:qV60IszQバリエーション作るって事は変数値を変える場所は調べるんでしょ
作業量は対して変わらんと思うけど
0165デフォルトの名無しさん
2015/01/24(土) 18:38:05.32ID:ZpIGFQ1h関数名だけは所々日本語使ってしまうなぁ
帳票作成処理()とか
英語力がそんなないから…orz
0166デフォルトの名無しさん
2015/01/24(土) 18:42:01.30ID:W3y8Uzfqお役に立ててよかったです。
自分の場合は、わけわからん人が勝手に設定シートをいじくらないように、下記のようにしてます。
・設定シートは非表示(VBAからしか表示できない方で)
・管理者用ボタン配置
・ボタン押下でパスワード入力させる
→設定シート表示
・ブック閉じる時には設定シートを非表示
これで、VBAわからないけど管理はできる人に設定シート管理は任せる。
あと、行列番号、セルアドレスだけでなく、他に期や年で変更が発生しうる要素は設定シート管理にしとく。
0167デフォルトの名無しさん
2015/01/24(土) 23:02:50.95ID:4KWVQwlIご愁傷さま。普通クラスモジュールが多いのは分かるけど、標準モジュールで30もあるなんて
元々の作りが悪い可能性が相当高いよ。そうじゃなかったらごめん。
多分、リファクタリングするとコード量が1/3以下になる気がする。あくまでカンだけどね。
今後のことを考えると、ごっそり時間を貰ってある程度クラスやインターフェースの知識をもってる人に
全改修して貰った方がいい。長い目で見たら絶対その方が後々の改修が減るよ。
とにかく短い時間でやっつけで片付けるしかないと言うのであれば、せいぜい共通化出来るところを探して共通化し、
変数で設定したり、分岐したりするしかない。
0168デフォルトの名無しさん
2015/01/24(土) 23:08:50.79ID:KEoUQ8Iu大規模な改修または今後一切の仕様変更をしないという決断を迫られてるかと
0169デフォルトの名無しさん
2015/01/24(土) 23:10:26.86ID:aakO0k5F0170デフォルトの名無しさん
2015/01/24(土) 23:25:53.10ID:LJy0wi3+★4 とりあえず、Excelのインスタンスを作らずにVB6で出来ることは全てスレ違いだと思ってください。
0171デフォルトの名無しさん
2015/01/24(土) 23:26:30.22ID:LJy0wi3+★4 とりあえず、Excelのインスタンスを作らずにVB6で出来ることは全てスレ違いだと思ってください。
0172デフォルトの名無しさん
2015/01/24(土) 23:27:10.57ID:LJy0wi3+★4 とりあえず、Excelのインスタンスを作らずにVB6で出来ることは全てスレ違いだと思ってください。
0173デフォルトの名無しさん
2015/01/24(土) 23:27:59.22ID:LJy0wi3+★4 とりあえず、Excelのインスタンスを作らずにVB6で出来ることは全てスレ違いだと思ってください。
0174デフォルトの名無しさん
2015/01/24(土) 23:30:29.96ID:LJy0wi3+★2 ExcelのVBA以外の部分に関する質問はNGです。
0175デフォルトの名無しさん
2015/01/24(土) 23:31:08.28ID:4KWVQwlI向こうのスレに戻ります。
0176デフォルトの名無しさん
2015/01/24(土) 23:47:03.79ID:LIgrDPe3テンプレ守れってのは分かるけど、ちょっとな・・・
0177デフォルトの名無しさん
2015/01/24(土) 23:51:10.58ID:LJy0wi3+★1 質問テンプレ(雛形)は用意しませんが、OSとExcelのバージョンは必ず書きましょう。
0178デフォルトの名無しさん
2015/01/24(土) 23:52:38.15ID:KEoUQ8Iu0179デフォルトの名無しさん
2015/01/24(土) 23:56:43.86ID:4KWVQwlI仕方ないよ。忘れてたけどこのスレはテンプレが絶対なんでしょ?
俺はあまり気にしてなかったけど、そう言うことなら仕方ない。
それ用のスレあるし。
0180デフォルトの名無しさん
2015/01/25(日) 18:06:28.80ID:tAhczX8T0181デフォルトの名無しさん
2015/01/25(日) 22:30:57.90ID:4QrMsa9lhttp://www.asahi-net.or.jp/~ef2o-inue/vba_k/images/04_Structure02.gif
この図の全体制御に対して呼び出すプロシージャー(主制御)の下に
条件に応じて実行させる処理が300通りほどありプロシージャーを300個つくりどれか一つを呼び出して処理するように書くと
途中で処理能力の限界に達してErrorが発生します。
300の処理を1つのプロシージャーに書きセレクトケースで実行させようと書きましたがやはり容量オーバーで実行できません。
現状妥協策としてしょりを100に絞って1つのプロシージャーにセレクトケースで条件に応じた処理を選択し実行するように書いていますが、
選択肢が沢山有る処理をプロ大量のシージャーにわけて管理することはできないのでしょうか? 単純にこれをやるとループ処理させたときに
数秒たつとすぐに処理の限界というようなErrorが出ます。
0182181
2015/01/25(日) 22:56:23.58ID:4QrMsa9l書き方がわかりにくくて済みません
要は
全体制御
|
子制御1、子制御2
に対して 孫制御が300個あり
子制御が実行するのは300のうちの1つだけで
複数の子制御で併用して使えるよう300個のプロシージャーにわけて書いて
条件に応じてそのプロシージャーを呼び出すようにしますと構造化プログラミングのルールに違反するようでErrorとなりますという話ですが
こういう場合は一体どう組めばいいのでしょうか?
0183デフォルトの名無しさん
2015/01/25(日) 23:05:41.21ID:khShqkpM★2 ExcelのVBA以外の部分に関する質問はNGです。
0184デフォルトの名無しさん
2015/01/25(日) 23:15:36.65ID:PLw+K7Cfそれでもテンプレのコピペでスレ違いになるんなら、テンプレに問題があるか、
レスに問題があるんじゃないの?
>>181
どうやらここではスレ違いらしいので、下記のスレで
http://peace.2ch.net/test/read.cgi/tech/1419718732/l50
0185デフォルトの名無しさん
2015/01/25(日) 23:33:00.57ID:iT4+Hxbi1、グラフで散布図を書く
2、近似曲線を直線、指数、対数、多項式と4種類重ねて表示させる
3、一番R2が高い曲線だけ残して、他の曲線を消す
というマクロを組んでいるのですが、
例えば、
.SeriesCollection(1).Trendlines(1)が直線
.SeriesCollection(1).Trendlines(2)が指数曲線
.SeriesCollection(1).Trendlines(3)が対数曲線
…
としたときに、
.trendlines(2).deleteにしても、.trendlines(3).deleteにしても、
なぜか.trendlines(1)が消去されてしまいます。
あげく、
.trendlines(2).select
selection.delete
と書いても、やはりtrendlines(1)が消去されてしまいます。
.trendlines(1)以外が削除できないのはどのような原因が考えられますでしょうか。
0186デフォルトの名無しさん
2015/01/26(月) 00:15:50.90ID:T/6/LmwgExcelのVBAで起きている問題ですので宜しくお願い致します。
0187デフォルトの名無しさん
2015/01/26(月) 00:28:38.48ID:gVLbs092どうしてこのスレにこだわるw
もう一方のスレなら制限が緩いんだから、素直にそっち行った方が良くないか?
たぶん、>>1の
例えExcel付属のVBE(Visual Basic Editor)を利用しようとも、このApplication以下のブックやシート、
セルやオブジェクト等を操作するもの以外はVBA分野の話ではないので、ここでは聞かないでください。
に引っかかってるんだと思うぞ
0188デフォルトの名無しさん
2015/01/26(月) 00:36:48.78ID:pD45ZdVE>複数の子制御で併用して使えるよう300個のプロシージャーにわけて書いて
300でエラー出るそうだが100位に減らすと出ないのか?
300で実行中にタスクマネージャーでexcelのメモリー消費量がどんどん増えて行くのか?
0189デフォルトの名無しさん
2015/01/26(月) 00:45:46.23ID:Vf+uB+Jvエラー番号とエラーメッセージを正確に教えて
0190デフォルトの名無しさん
2015/01/26(月) 00:58:46.96ID:ajD/biY/処理の限界というようなErrorってなんだよ
0191デフォルトの名無しさん
2015/01/26(月) 10:04:58.09ID:WvtN1ik0普通の能力を持った人間ができること。
つまり>>185 は無能力故に作ったモノが動かないのであって決してExcel VBAのせいではない。
0192デフォルトの名無しさん
2015/01/26(月) 10:39:14.60ID:7PO1Rygtアンカーもまともにつけられない無能乙
0193デフォルトの名無しさん
2015/01/26(月) 11:15:08.23ID:o5EuO8YW頭につけてさらに改行しなきゃいけないとか?
パースの弱いまとめサイトか何かか?
こんなスレを二次利用するとかあんのか?
>>192
>>191
エラーなんて書いてないけど「場合」としているから問題ないとか卑怯だからな
憶測で人を蔑めるお前は能力云々以前にどうしようもない奴だよ
isis行けよゴミ
>>185
原因知らね
set target = .SeriesCollection(1).Trendlines(2)
target.delete
も同じ結果?VBAの常識的には異常だね、なんだろうね
ヘルプとかにヒントないの?(興味本意)
0194デフォルトの名無しさん
2015/01/26(月) 11:30:41.12ID:eJA+Ejea> アンカにまともとかあんの?
レス番間違えてるってことだろ
0195デフォルトの名無しさん
2015/01/26(月) 20:21:12.52ID:ajD/biY/そんなわけないだろうと思いつつ2007で試したら再現したわ
原因や解決方法が欲しいなら、マイクロソフトに問い合わせをお勧めする
上の方にもなんかあったけど、グラフって結構あやしいんだよなぁ
0196デフォルトの名無しさん
2015/01/26(月) 23:04:30.68ID:h7ndqy830197デフォルトの名無しさん
2015/01/27(火) 01:33:16.01ID:upRrWRGKテンプレを守れない奴に回答するつもりはない
0198デフォルトの名無しさん
2015/01/27(火) 07:41:58.62ID:juhI5XvQべつにアンタだけが回答者じゃないんだから
答えられないなら黙ってスルーしときなさいよ
0199デフォルトの名無しさん
2015/01/27(火) 14:48:06.31ID:YTyfrIUd0200デフォルトの名無しさん
2015/01/27(火) 14:49:06.88ID:YTyfrIUd0201デフォルトの名無しさん
2015/01/27(火) 15:11:07.01ID:jF6LtWis「C++などで言うクラス内メソッド」の意味するところが良くわかりませんが、ワークシートモジュールは
各ワークシート専用のメソッドを記述する場所です。
Sheet1のワークシートモジュールでRange等を参照する場合、Worksheetを明示しなければ、それは
Sheet1内のRangeだということになります。
ワークブックモジュールも同様ですね。
標準モジュールでは、Workbookを省略した場合はActiveWorkBookを(*1)、Worksheetを省略した場合は
ActiveWorkSheetが対象となります。
(*1)ひょっとしたら、ThisWorkbookなのかもしない。
また、IDEのコード編集領域の上部に(General)と書かれたコンボボックスがありますが、ここで
WorkbookやWorksheetを選択すると、右のコンボボックスでイベントを選択できるようになり、
各Worksheet/Workbook用のイベントハンドラを記述できます。
0202デフォルトの名無しさん
2015/01/27(火) 15:20:02.68ID:jF6LtWisVBAでは(VBも同様なんですが)、暗黙のインスタンス化というものがあり、新たにBookを開いたとき、
ワークシート数が1なら、
* Sheet1クラス
* Sheet1クラスのインスタンス
* ThisWorkbookクラス
* ThisWorkbookクラスのインスタンス
が自動的に生成されます。
Sheet1クラスが作られるため、Dim sht as Sheet1という型指定ができ、Sheet1クラスのインスタンスが
作られるため、標準モジュールで何の宣言もせずにSheet1.SomeMethodと呼び出すことができます。
ただし、Dim sht as Sheet1と宣言しても、Set sht = new Sheet1とはできません。
他のオブジェクト指向用語で言うなら、各WorksheetとWorkbookのシングルトンオブジェクトが自動生成される
というイメージでしょうか。
0203デフォルトの名無しさん
2015/01/27(火) 15:29:06.53ID:jF6LtWis0204デフォルトの名無しさん
2015/01/27(火) 15:35:17.31ID:YTyfrIUd0205デフォルトの名無しさん
2015/01/27(火) 18:41:59.26ID:upRrWRGKシートって考えれば考えるほど分からなくなるよね。
暗黙のインスタンスがシングルトンで作られるのは分かるけど、
ブックを閉じても内容がクリアされないってところはファイルそのものだし。
0206デフォルトの名無しさん
2015/01/27(火) 18:51:14.65ID:9/pKg/Bv内容がクリアされない
どういうこと?
0207デフォルトの名無しさん
2015/01/27(火) 18:53:08.10ID:nXIQJnkvセルとかに書かれている内容とか、クリアされないじゃない。
0208デフォルトの名無しさん
2015/01/27(火) 19:51:46.04ID:upLB79bt0209デフォルトの名無しさん
2015/01/27(火) 19:56:47.93ID:9/pKg/BvVBAはEXCELのオマケなんだから。
0210デフォルトの名無しさん
2015/01/27(火) 20:54:51.84ID:nXIQJnkv0211デフォルトの名無しさん
2015/01/27(火) 21:13:32.64ID:ZHjx6d1m0212デフォルトの名無しさん
2015/01/28(水) 08:13:22.17ID:a3QtgkTi俺も感じない。
んなこといったら、Accessなんてもっと違和感だからけで使えないわな。
インターフェースとDBも、さらには言語まで全部内包してるんだから。
しかし、そんなことに違和感覚える人は脳みそが硬直化してると言える。
昔からあるんだからこんなもの。
0213デフォルトの名無しさん
2015/01/28(水) 17:35:08.43ID:kJf5e2Zn昔はバイト列にデータとプログラムの区別は無かった
今はプログラムとデータは区別する時代
違和感を感じないのは鈍感なだけかもしれん
0214デフォルトの名無しさん
2015/01/28(水) 18:39:15.99ID:cH2DWeor多分VBA系じゃなくて.Netや旧VBとかを主体にやってるんじゃないか?
そうしたら普段は外部からただのファイルとして扱っているだろうからな。
俺もやっぱりVB.Netのフォームで不思議に感じたわ。
あいつは生成しようがしまいが使えるからな。
意味合い的にはちょっと違うけどな。
0215デフォルトの名無しさん
2015/01/28(水) 20:03:06.31ID:FEW+DfFqvariantに突っ込むのは無理だった
0216デフォルトの名無しさん
2015/01/28(水) 21:56:35.26ID:Xnh8EDKt配列をプロシージャの引数に渡すってこと?
ならば、
Sub kinoko(simejiArray() As String)
といった形で渡す。
simejiArray()の元になる配列を生成してるルーチンでは
最後に
Call kinoko(matsutake)
といった形で呼び出す。
0217デフォルトの名無しさん
2015/01/29(木) 00:49:28.98ID:tR9/a+ynユーザ定義型の配列をoptionalで渡すとエラーになるのです。
調べたところ、vbaでは配列をoptionalで渡せない仕様らしく、
その場合は配列をvariant型変数に代入して回避する方法があるということでしたが、
ユーザ定義型の場合は、variant型変数に代入するところでエラーになりました。
やりたいことはこんな感じです。
type kinoko
name as string
season as string
end type
sub main
dim k(1) as kinoko
dim ret as string
k(0).name = "shimeji"
k(1).name = "maitake"
ret = myfunc(k)
end sub
function myfunc(optional k() as kinoko) as string
なにか処理
myfunc = "miso soup"
end function
0218デフォルトの名無しさん
2015/01/29(木) 00:51:13.82ID:HI8rUnX+byrefしかできんのじゃ
0219デフォルトの名無しさん
2015/01/29(木) 01:41:49.80ID:N336K0Nj普通にVBAプロジェクト内で定義してるユーザ定義型では無理
諦めるかクラスで代用するか
0220デフォルトの名無しさん
2015/01/29(木) 07:39:06.00ID:3hW0BXTS今手元にExcelがないから試せないけど、
その配列の変わりにCollectionを使うか、
配列ごとCollectionに突っ込んでみてもダメ?
0221デフォルトの名無しさん
2015/01/29(木) 11:37:49.91ID:wMkjI3CSお世話になります。
私、責任者の加茂と申します。以後、宜しくお願い致します。
http://www.apamanshop.com/membersite/27009206/images/kamo.jpg
浪速建設様の見解と致しましては、メールによる対応に関しましては
受付しないということで、当初より返信を行っていないようで、今後につい
てもメールや書面での対応は致しかねるというお答えでした。
このように現在まで6通のメールを送られたとのことですが、結果一度も
返信がないとう状況になっています。
私どものほうでも現在までのメール履歴は随時削除を致しております
ので実際に11通のメールを頂戴しているか不明なところであります。
・T http://s-at-e.net/scurl/ia-T.html
・Zle http://s-at-e.net/scurl/ia-Zle.html
0222デフォルトの名無しさん
2015/01/29(木) 14:10:35.50ID:qpPWWKCR諦めてoptionalやめました。
不要な場合は空配列渡して、function側で if (not arr) <> -1 で判定するように修正
0223デフォルトの名無しさん
2015/01/29(木) 17:49:35.18ID:pY+BfFdL試しにrangeをvariant配列にいれて
配列を同じ場所に貼り付けたら
書式がクリアされたのですが
同じ配列で同じrangeに貼り付けるとこうなるものですか?
文字サイズを9にしてたのが11になってしまったのですが
何か対策手段があれば教えてください
0224デフォルトの名無しさん
2015/01/29(木) 18:53:48.34ID:OdkcJOPr> 書式がクリアされたのですが
試したけど、書式はそのままだったよ。
> 配列を同じ場所に貼り付けたら
そもそも「貼り付ける」というのが誤りな気がするが・・・。
variant配列を使う場合は、普通代入するもんだけど。
0225デフォルトの名無しさん
2015/01/29(木) 19:12:12.05ID:qpPWWKCRset val = range(ほげ)
とかやってたら笑う
0226デフォルトの名無しさん
2015/01/30(金) 08:06:03.60ID:W+N1TSjqなんか汚いな。
If arr = True Then
じゃ駄目なのか?
0227デフォルトの名無しさん
2015/01/30(金) 08:49:04.36ID:kOBKTeQqdim arr() as string
で、arrがredimされてるかの判別方法を探してて見つけたのをそのまま使ってました。
-1がtrueだから、直すとしたら
(not arr) = false
ですかね。あとで試してみます
0228デフォルトの名無しさん
2015/01/30(金) 10:51:17.37ID:nfdpmMl0反転せずにそれがTrueかどうか調べたほうが素直だと思うんですけど
0229デフォルトの名無しさん
2015/01/30(金) 10:53:28.10ID:nfdpmMl00230デフォルトの名無しさん
2015/01/30(金) 11:01:05.83ID:1A+w7QQqってのが、可変長配列が初期状態かどうかの唯一の判定方法っぽいなあ。
初めて知ったよ。
0231デフォルトの名無しさん
2015/01/30(金) 13:26:09.86ID:kOBKTeQqredim前→-1
redim後→大きい負の値(190億くらい)
なので、-1と比較するしかないみたい
>>230
on error gotoな状態でuboundして分岐させたり(これが本来のやりかた?)
sgn関数使ったりする方法もあるようですよ
0232デフォルトの名無しさん
2015/01/30(金) 16:44:17.55ID:Um9YeW/1上記数式の加算記号の後に改行を入れたとこ下記のようになりました。
(B11*B51)+
(C11*C51)+
(D11*D51)+
(E11*E51)+
(F11*F51)+
(G11*G51)+
(H11*H51)+
(I11*I51)+
(J11*J51)+
(K11*K51)+
(L11*L51)+
(M11*M51)+
(N11*N51)+
(O11*O51)+
(P11*P51)+
(Q11*Q51)+
(R11*R51)+
(S11*S51)+
(T11*T51)+
(U11*U51)+
(V11*V51)+
(W11*W51)
何やら法則があるのは分かるのですが、これを一括で解決する書き方(短い式)がありましたら教えてください!
0233デフォルトの名無しさん
2015/01/30(金) 16:50:13.43ID:0YV6xwSysumproduct
0234デフォルトの名無しさん
2015/01/30(金) 17:04:21.86ID:Um9YeW/1できました!ありがとうございます!
0235デフォルトの名無しさん
2015/02/01(日) 01:20:19.75ID:1M64orpFVBA自体をVBAで書き換える事はできないのでしょうか?
0236デフォルトの名無しさん
2015/02/01(日) 01:38:20.77ID:R7pq7q7A出来ない事はないが
初心者にはハードル高い
0237デフォルトの名無しさん
2015/02/01(日) 01:57:54.04ID:rAGWgKIP何十年前のコンピュータで、メモリが足らないから自己書き換えなんてやってた時代ならともかく、
そういうことは考える必要は無い。
最初から書き換え後のコードを用意しておいて、必要に応じて条件分岐すればいい
0238デフォルトの名無しさん
2015/02/01(日) 02:00:25.02ID:4ng7/cbqVBAでやろうとは思わないけど。
0239デフォルトの名無しさん
2015/02/01(日) 05:10:58.76ID:hbd+H1bAどうしても自家書きしなければ逝けない数値の書き換えや
VBAの記述でも配列などが使えたらさっさとで終わるだろうなあと
0240デフォルトの名無しさん
2015/02/01(日) 05:42:43.70ID:Zdr4/0x6モジュールが100あるの?凄いねw
エクスポートして、それぞれモジュールをテキストファイルにしてから書き変えればいいんじゃないかな。
それで各モジュールを消してインポートすれば、まぁ100個くらいなら何とかなるよ。
0241デフォルトの名無しさん
2015/02/01(日) 09:05:49.17ID:oCjnTYIkexcelにそんな多く機能持たせた経験ないからよくイメージ出来ないんだけど
そんなにモジュール多いと、ファイルサイズとかに影響出ないのかな
0242デフォルトの名無しさん
2015/02/01(日) 09:24:12.16ID:4ng7/cbqVBAではそれを実行する簡易インタープリタを実装すれば
問題解決出来そうな気がする
0243デフォルトの名無しさん
2015/02/01(日) 09:31:32.57ID:Zdr4/0x6本気にするなよw
このスレから人離れを起こさせないように苦労しているいつもの>>1の自演だろw
モジュールが本当に100も必要なアプリなら、
まともなチームリーダーだったら外部システムからExcelを出力することを考えるわw
いつも健気に頑張っているから騙されてるふりしてるけどさ、流石にこれはちょっと酷いw
0244デフォルトの名無しさん
2015/02/01(日) 10:25:49.02ID:P6Wv1Uek>>154か?大変なことになってるねw
0245デフォルトの名無しさん
2015/02/01(日) 10:42:56.79ID:rgNJ3Qt7頭の悪いコードを書いてるとこうなるっていういい事例だわな。
0246デフォルトの名無しさん
2015/02/01(日) 13:05:10.56ID:gxx6hjczホントにそのボリュームのVBA作り上げてるなら根性だけは大したものかと
0247デフォルトの名無しさん
2015/02/01(日) 15:03:51.30ID:sjXjc1T+ウイルス作りたいの?
0248デフォルトの名無しさん
2015/02/01(日) 16:09:14.35ID:s/JSe9N/0249デフォルトの名無しさん
2015/02/01(日) 19:07:26.98ID:Zdr4/0x60250デフォルトの名無しさん
2015/02/01(日) 19:26:05.58ID:4ng7/cbq「田舎でいいや」というレスは
頭の悪いコード(田舎)が頭の悪いコード(田舎=動かない)のままでいい
という事だから、結果「動かなくてもいいや」という意味になる。
>>249は本当に
モジュール100個のVBAだったら動かなくてもいいや
という意味の事を伝えたかったのだろうか?
ちょっと気になる。
0251デフォルトの名無しさん
2015/02/01(日) 19:33:32.30ID:Zdr4/0x60252デフォルトの名無しさん
2015/02/01(日) 19:36:29.46ID:Oy9MlKBGどう見ても >>248 の言う
・頭の悪いコード
・動けば都
は、同一のコードを指してると思うが
0253デフォルトの名無しさん
2015/02/01(日) 19:41:02.43ID:4ng7/cbqうん、俺も同一のコードを指してると思うよ。
お前の解釈だとどういう意味になるんだ?
ちょっと気になる。
0254デフォルトの名無しさん
2015/02/01(日) 19:43:23.05ID:Zdr4/0x6受けるなら時間もらって詳細設計から、場合によっては基本設計からやり直す。
0255デフォルトの名無しさん
2015/02/01(日) 19:43:32.01ID:Oy9MlKBG>>250 はうまいこと言おうとして失敗するタイプと言う意味かと w
0256デフォルトの名無しさん
2015/02/01(日) 19:45:51.14ID:Zdr4/0x6何を言っているのか分からないなぁ
0257デフォルトの名無しさん
2015/02/01(日) 19:48:10.46ID:4ng7/cbqうまい事言ってるのは>>248だろ?
俺なんかがうまい事言うなんて、畏れ多くて出来んわ。
0258デフォルトの名無しさん
2015/02/01(日) 20:05:13.84ID:jkfzVUo50259デフォルトの名無しさん
2015/02/01(日) 20:28:17.66ID:a7daD80fApplication.OnKey "{ESC}", "func1"
でESCをfunc1に設定したとしても、このxlamとは別のマクロ付きBook2が同時に読み込まれたとして、
その中でOnKeyが実行されて別の関数func2に割り当てられた場合、当初のfunc1がESC押下で実行出来なくなると
思うのですが、こういう場合、func1はどんな事が有ってもESC押下で実行出来るようにする設定みたいなのは
ありますか?ただし、私が変更出来るのはBook1.xlamのみという前提で。
0260デフォルトの名無しさん
2015/02/01(日) 20:42:58.80ID:Zdr4/0x6http://officetanaka.net/excel/vba/tips/tips60.htm
田中さんが何か言ってるよ。参考にならない?
これさー、今度から何でエラーが出るか聞きたいときはエラーメッセージ書けとか、
質問する前にググれとか、テンプレに追記しといた方がいいんじゃない?
0261デフォルトの名無しさん
2015/02/01(日) 20:47:48.76ID:a7daD80fレス有難うございます。
読んでみましたが私のやりたい事とちょっと
違うようなんですが?
0262デフォルトの名無しさん
2015/02/01(日) 21:05:15.93ID:Zdr4/0x6あ、そう。じゃ何をどうしたいのか分からないし、めんどくさいからいいや。
じゃーねー
0263デフォルトの名無しさん
2015/02/01(日) 21:12:43.16ID:4ng7/cbq一部のマクロに絶大な特権を与える事にも似たようなものであり
また、これを許可するのも、そのマクロ自身であるという事は
その実行環境であるところのエクセル自身の重大なセキュリティホールと言っても
過言ではないくらいの恐るべき脅威に近いものがあるから
多分出来ないんじゃないかと考察するに至ったわけです。
なんも知らんけどな
0264デフォルトの名無しさん
2015/02/01(日) 22:04:35.58ID:Oy9MlKBG特に
> ただし、私が変更出来るのはBook1.xlamのみという前提で。
なんて条件は非常に胡散臭いので、知ってても迂闊に答えない人がほとんどだし
0265デフォルトの名無しさん
2015/02/01(日) 22:21:01.30ID:Zdr4/0x6じゃ、それも次回テンプレ追加で
0266デフォルトの名無しさん
2015/02/01(日) 23:07:46.68ID:XG47cZe8ExcelでSurfaceのペンを使ってるんだけど、ペンを有効にしてるときって手が画面に少し触れただけでペンが触れたと反応するんだけど、なんとかならないかな?
onenoteとかだどペン以外は反応しないようになってるから、Excelでも同じようにしたいんだ
詳しい人教えて下さい
0267デフォルトの名無しさん
2015/02/01(日) 23:37:29.07ID:P6Wv1Uek0268デフォルトの名無しさん
2015/02/02(月) 00:20:52.28ID:FBHevKSn総合スレで聞くわ
0269デフォルトの名無しさん
2015/02/02(月) 00:21:29.92ID:XTmeW3Aaここは「ExcelのVBA」の質問スレです。
「Excel」の質問スレではありません。
0270デフォルトの名無しさん
2015/02/02(月) 00:37:04.92ID:0iu4BYNO↑これはコードの一部ですが
RANGEとセルズが混在していても一応動いているようですが
やはり統一した方が良いのでしょうか?
混在していても全く問題は無いのでしょうか?
何か問題はありますでしょうか?
0271デフォルトの名無しさん
2015/02/02(月) 00:51:04.53ID:/NzKCxLkが、統一した方が読みやすいと思います。
私は使い分けとして
行だけループする場合はRange
列もループする場合はCellsを使います。
大体 Range("A" & row) みたいな書き方をします。
後、Rangeの方がインテリセンスを使うことができます。
0272デフォルトの名無しさん
2015/02/02(月) 00:59:08.60ID:0iu4BYNOありがとうございます。
VBAを覚えたての頃に書いたコードはすべてRangeのみで書かれていまして
列のループ処理をやるためにセルズにする必要が出てきた感じですが
全部書き換えるのは手間なので問題がないようでしたらそのままでも良いかと考えています。
0273272
2015/02/02(月) 01:27:00.98ID:jDU54aaNこれを差し替えていくのはめんどくさい&間違えの元じゃないかと思うのですが
大量にあるRangeの記述を簡単にセルズに変換する方法はあるのでしょうか?
0274デフォルトの名無しさん
2015/02/02(月) 04:05:08.60ID:SJWlqNpARange使うのは範囲指定するとき必要な場合だけ
0275デフォルトの名無しさん
2015/02/02(月) 04:24:51.86ID:plHHO9Jdおれも
A1とか記述したのは、初心者の頃マクロ記録をチョコット直してた時くらい
0276デフォルトの名無しさん
2015/02/02(月) 07:37:46.48ID:NU5Zauz1無いかな
>>274
俺も
ルール付けしとくと何かと楽
0277デフォルトの名無しさん
2015/02/02(月) 12:04:30.92ID:bNVSAdRU元のシートがA1表示だから
range使ってるよん
誰が見てもわかる
ループのときはcell使うけども
0278デフォルトの名無しさん
2015/02/02(月) 12:10:33.73ID:nXgBCJxLまともなテキストエディタ使って置換すればいいんじゃねーの
0279デフォルトの名無しさん
2015/02/02(月) 15:35:52.53ID:kL0w7RLLRangeが返すのはRange型で素直なんだが、Cellsが返してるのも実はRange型なんだぜ
0280デフォルトの名無しさん
2015/02/02(月) 16:22:17.96ID:G/z3lBBzExcel2007なんだけど、モジュール内で普通に使えてるものがイミディエイトからだと
「AddressOf オペレーターの使い方が適切ではありません。」というメッセージが出ます。
foo(arg, AddressOf fun)
foo(arg, VBA.CLng(AddressOf fun) )
モジュール内で上が正しく動く状態で、イミディエイトではどちらもダメ。
0281280
2015/02/02(月) 23:01:08.75ID:Ky9zZXbI0283デフォルトの名無しさん
2015/02/03(火) 01:54:12.81ID:RfSVj4lvスレ違いを追放するんだ!
0284280
2015/02/03(火) 07:07:00.43ID:mC3dFwzO>>280はスマホから、>>281は帰宅してPCから書き込んだまで。
とりあえずVBAなんでもスレに移動した。
0285デフォルトの名無しさん
2015/02/03(火) 11:55:55.94ID:hDHAxkPN例えば、Activecell.Speak、を実行するとExcel会社の英語のお姉さんが「Hello」としゃべってくれます。
しかしセルに入れずにしゃべらす方法はありませんか?
無駄にセルを使いたくないだけでなく、条件や計算式によってしゃべらせる文章が違ってくるからです。
0286デフォルトの名無しさん
2015/02/03(火) 12:45:09.53ID:vk5X3HbwApplication.Speech.Speak "Hello"
0287デフォルトの名無しさん
2015/02/03(火) 17:42:41.61ID:pUr5YgOi今まで配列に入れて比較してたけど
思ったより関数が高速だから最近使うようになったものの
プログラムが見にくく感じるので
0288デフォルトの名無しさん
2015/02/03(火) 17:59:03.79ID:uDbnXfrQ0289デフォルトの名無しさん
2015/02/03(火) 21:18:47.31ID:a2fTfTzN0290デフォルトの名無しさん
2015/02/03(火) 21:25:14.07ID:Ppm0iTyRこのスレ民にとっては異端?
0291デフォルトの名無しさん
2015/02/03(火) 22:33:43.68ID:UxuA38XS基本使わん
0292デフォルトの名無しさん
2015/02/03(火) 23:53:34.56ID:hDHAxkPNでよく使う。
0293デフォルトの名無しさん
2015/02/03(火) 23:54:40.08ID:hDHAxkPNApplication.Speech.Speak "Oh, thank you very much!"
0294デフォルトの名無しさん
2015/02/03(火) 23:59:02.67ID:RfSVj4lvだけどコードの長さや可読性、レスポンスを考慮して、有効だと判断したらガンガン使う。
0295デフォルトの名無しさん
2015/02/04(水) 01:09:42.43ID:BFzhN8Ygそのセル参照するように出来ないかまず考える
0296デフォルトの名無しさん
2015/02/04(水) 02:48:03.92ID:n5cykeUgWorksheetFunction.RoundとVBAのRound関数は仕様が違うからな
後者じゃ四捨五入出来ないもんな
0297デフォルトの名無しさん
2015/02/04(水) 03:35:07.30ID:Nfe1oQPYついに200に達しましたが皆さん最大で何シート使ってますか?
200シートでもそれなりに動いていますが
限界実用範囲は何シートぐらいまでなのでしょうか?
0298デフォルトの名無しさん
2015/02/04(水) 05:39:46.43ID:OYpgUZd50299デフォルトの名無しさん
2015/02/04(水) 06:38:17.48ID:vNQZnkOK0300デフォルトの名無しさん
2015/02/04(水) 06:48:55.80ID:vNQZnkOKメモリが許す範囲まで。
以前、セルを縮めて着色して、シートに絵を描いたものを切り換えて、何かのアニメのオープニングを再現していたものを
見たことがある。
多分何万枚って持てると思う。ただし、この話はスレ違いなのでここまで。
0301デフォルトの名無しさん
2015/02/04(水) 09:17:15.52ID:5w98FKMD0302デフォルトの名無しさん
2015/02/04(水) 10:33:51.72ID:gdgyJzbSどうぞ
http://officetanaka.net/excel/vba/tips/tips40.htm
0303デフォルトの名無しさん
2015/02/04(水) 10:45:27.12ID:5w98FKMD2つ書いてあるけど、どっちを使ってるのさ?
2次元配列に対応して、複数のキー列も選択できて、文字と数値が混在しててもOKなクイックソートを作るとしたら面倒だ
と思うけど、みんなどうしているんだろ?
0304デフォルトの名無しさん
2015/02/04(水) 11:00:38.14ID:8rr12R5m高校生(中学生じゃない)に連立方程式教えてて、加減法と代入法教えたら
「先生はどっち使いますか?」て聞かれたことを思い出した。
んなもん、問題見て判断しろバカ
0305デフォルトの名無しさん
2015/02/04(水) 11:31:20.20ID:QfhTV/If先生の資格なし。
そんなもん「加減法が一般的です。でも初心者には直感的には代入法が分かりやすいでしょう。とくにx=○○かそれに近い形で1つの変数が明示されてるような場合は。」
と言ってあげればいい。
わかりやすく説明する能力こそ先生に必要なもの。
バカとすぐ切れる瞬間湯沸かし器はアホに必要なもの。
0306デフォルトの名無しさん
2015/02/04(水) 11:44:39.03ID:5w98FKMD複数の方法を知った上での一長一短という問題とは違うと思うけど?
汎用性のあるソート関数があれば、ワークシートに貼り付けて処理するなんて悪手は使う気なくなる。
ただそういうものを作るには気合いがいるから、「みんなどうしてるんだろう」という疑問が出てくるわけで。
0307デフォルトの名無しさん
2015/02/04(水) 12:27:59.82ID:8rr12R5m>>304のレスで生徒に切れたと思われたのか?
その時は代入法でやらせたよ。1つめの
式をx=の形に直して2つめ式に入れろって方がやり方としては単純だし。
そのあと分数の計算まで教えたけどな
>>306
汎用性のあるソート関数ってどんなの?
なかったら作るか、ググればいいんじゃないの?
0308デフォルトの名無しさん
2015/02/04(水) 12:32:04.05ID:/D++sjNYそれ答になってないたろw
0309デフォルトの名無しさん
2015/02/04(水) 12:46:36.02ID:5w98FKMD汎用とはそうだな、
・入力は1次元または2次元配列
・2次元の場合、キー列を複数指定可能
・昇順降順の指定が可能
・入力配列のLBoundに縛りなし
・数値文字混在もあり
が基本的なところだろう。
インタフェースは
sort(配列, キー, 昇降, その他オプション)
といった普通の感じで。
0310デフォルトの名無しさん
2015/02/04(水) 13:00:25.19ID:8rr12R5m普通だな笑
面倒なのはわかるが、一回作ったら使い回せるんだし、それくらい作れば?
0311デフォルトの名無しさん
2015/02/04(水) 13:08:46.60ID:5nwIFoIt0312デフォルトの名無しさん
2015/02/04(水) 13:19:55.18ID:5w98FKMD俺は作ってるよ。dllだけど。
「みんなどうしてる?」という質問に対して「それくらい作れば」って答えはどこかおかしいな。
0313デフォルトの名無しさん
2015/02/04(水) 14:07:25.56ID:snuPlTJKDBのデータベタベタ貼り付けてvlookupやらで加工して
最後にソートをよく使ってるんだが
0314デフォルトの名無しさん
2015/02/04(水) 14:24:45.47ID:d/XOjNRx比較条件も指定できなかったり全然汎用性なくて笑える
0315デフォルトの名無しさん
2015/02/04(水) 18:36:09.87ID:vNQZnkOK3次元以上は一般的にそんなに使われないからいいんじゃない?
3次元は混んだ作りすると死ねるよ?
そんなことより早く.Net化して、IComparableインターフェース実装出来るようにしてくれればいいのに。
そうすれば配列に入ったエンティティとして作ったクラスでさえ
そのプロパティからソートしたりすることも出来るのに。
0316デフォルトの名無しさん
2015/02/04(水) 19:48:41.31ID:OYpgUZd5RoslynオープンソースにするんだしC#スクリプト言語化してくり
0317デフォルトの名無しさん
2015/02/04(水) 20:00:25.95ID:QfhTV/IfふだんはローカルのCドライブのどこかに置いておき
その2つのファイルの更新日時を調べて(ネットワークフォルダの更新日時を調べるのは軽いと仮定)
違ったときだけネットワークフォルダのファイルをローカルにコピペ、
同じときはローカルのファイルを開くようにしたいです。
このことは実現できますか?
0318デフォルトの名無しさん
2015/02/04(水) 20:22:44.88ID:zR1kWEWrできると思います
VBAではFileDateTime関数を使えば最終修正日時を取得できます
後はネットワーク上にあるファイルとローカルファイルを比較するだけです
0319デフォルトの名無しさん
2015/02/04(水) 20:25:04.74ID:Sl7HR56Pおまいら今日もいい感じにスレ違いだな。
0320デフォルトの名無しさん
2015/02/04(水) 20:28:49.66ID:FmLt4Q/z自分で作ってもいいし、面倒なら xcopy とかを内部で起動するのもありかと
ただ、Excel ってなぜか開いてるだけで更新日時を変えちゃうから、運用上問題ないかはよく検討した方がいいと思う
0322デフォルトの名無しさん
2015/02/04(水) 20:46:00.36ID:QfhTV/If継承とかコンストラクタとかが使えないならそんなに便利ではないという結論でいいんでしょうか?
いろんなデザインパターンを駆使して大規模システムをスマートにコーディングしようと考えているんだけど。
0323デフォルトの名無しさん
2015/02/04(水) 20:57:12.79ID:Sl7HR56Pそうだね。
VBAはコンストラクタが使えないとか、
継承が使えないから便利ではないと言っているくらいのレベルなら、
正直オブジェクト指向自体が便利じゃないから止めといた方がいいと思うよ。
0324デフォルトの名無しさん
2015/02/04(水) 21:12:55.81ID:5zzM5KFeVBAのクラスでもカプセル化出来るし使える場面はあるはずだよ
大規模システムってどの位の規模?
0325デフォルトの名無しさん
2015/02/04(水) 21:33:46.95ID:3HKYaoYX0326デフォルトの名無しさん
2015/02/04(水) 21:39:08.97ID:FmLt4Q/z> 継承とかコンストラクタとかが使えないならそんなに便利ではないという結論でいいんでしょうか?
その結論でいいけど、>>321 みたいなこと聞いてるレベルならデザパタ云々の前にやることあるだろ...
0327デフォルトの名無しさん
2015/02/04(水) 23:30:17.87ID:BFzhN8YgそれはVBAでやるような話じゃない
オフライン ファイルでググれ
>>322
オブジェクト指向言語を想定したデザインパターンの話っていうならその通り
0328デフォルトの名無しさん
2015/02/05(木) 00:00:11.44ID:BZaynF65どんなパターンを使えばいいかとか、デザインパターン知ってればすぐ思い浮かびそうなもんだけどな。
0329デフォルトの名無しさん
2015/02/05(木) 05:35:22.83ID:Z+/EIniYACCESSでよかったじゃんってなる
0330デフォルトの名無しさん
2015/02/05(木) 07:13:53.16ID:13xOFOi9ロジックは他の言語
Excelはビューおよびコントロールとして使う
こういうやり方が吉だ
0331デフォルトの名無しさん
2015/02/05(木) 07:56:16.04ID:oPJAOj4g少しだけ機能が増えた程度?
0332デフォルトの名無しさん
2015/02/05(木) 08:12:03.34ID:zH6zCuP4他のエディタと連携ってできる?
0333デフォルトの名無しさん
2015/02/05(木) 08:24:30.87ID:9SfLMUWMそういう下らない話は他でやれよ。
0334デフォルトの名無しさん
2015/02/05(木) 12:01:16.49ID:psDjLvHN0335デフォルトの名無しさん
2015/02/05(木) 12:21:05.11ID:5V2ZyrCGctrl+y の挙動だけは今だに許す気になれん
0336デフォルトの名無しさん
2015/02/05(木) 16:31:44.91ID:8iV8xempこのページの「コレクション:解放方法」では、まず全部の中身をRemoveで削除してからNothingを代入しています。
http://mitene.or.jp/~rnk/TIPS_VB_GEN.htm
単にNothingを代入するだけではダメなのですか?
0337デフォルトの名無しさん
2015/02/05(木) 16:37:39.43ID:Sga35B6x使わなくなった変数の中身がどうなっていようとかんけいないじゃん!
0338デフォルトの名無しさん
2015/02/05(木) 16:57:01.69ID:8iV8xemp中身も使わなくなったら全部1つ1つRemoveしたほうがいい?
0339デフォルトの名無しさん
2015/02/05(木) 17:25:30.07ID:TvPdQkb90340デフォルトの名無しさん
2015/02/05(木) 18:07:11.99ID:gRFCSFT3どうせVSも無料化してるんだし頼むよMS様
0341デフォルトの名無しさん
2015/02/05(木) 18:10:53.32ID:LBbAtoIq0342デフォルトの名無しさん
2015/02/05(木) 18:13:56.63ID:osIltw0COption Base 0
Option Base 1
のどっちでやりますか?
0343デフォルトの名無しさん
2015/02/05(木) 18:22:41.26ID:TvPdQkb9配列使うことが滅多にないから、毎回dim ary(1 to 10)とかやる
0344デフォルトの名無しさん
2015/02/05(木) 19:16:16.45ID:MCsqUTWqそのコレクションの要素が、そのコレクションへの参照持ってたりしたら
単にコレクションの変数をクリアするだけじゃダメなはず
0345デフォルトの名無しさん
2015/02/05(木) 19:18:09.07ID:i4Mluon00346デフォルトの名無しさん
2015/02/05(木) 19:23:23.83ID:MCsqUTWq宣言時に下限指定できるので、Optionで下限変える必要性が薄い
Option Baseにかかわらず0からの配列が生成される場合がある
なので
俺は特殊な事情がない限り、1からしか使わなくても、Option Base 0
0347デフォルトの名無しさん
2015/02/05(木) 19:47:02.12ID:NPMhX/hm> Option Baseにかかわらず0からの配列が生成される場合がある
LBound( ) 使うから、Option Base は設定したことない
つまりディフォルトのまま
0348デフォルトの名無しさん
2015/02/06(金) 00:03:00.47ID:WyNOk6KOArray(Array(0, 1), Array(2, 3), Array(4, 5))
なんか次元を増やすよりこっちの方が自然な気がしてきた。
0349デフォルトの名無しさん
2015/02/06(金) 00:56:28.55ID:MCNka57cそんなことできたっけ?
0350デフォルトの名無しさん
2015/02/06(金) 01:52:43.14ID:d0YfM+I83次元も分かり辛そうだけどそっちも分かり辛そうだなw
複雑な構造を持つ場合はエンティティクラス作ってコレクションやディクショナリに格納するだろjk
入れ子にする場合はそのエンティティのプロパティを更にコレクションやディクショナリに詰め込んだ
エンティティクラスにしておけば、引っ張り出すとき何て言う項目か一目瞭然だ。
出来る出来ない以前の問題だわな。
0351デフォルトの名無しさん
2015/02/06(金) 04:05:29.06ID:ph6zPD+r0352デフォルトの名無しさん
2015/02/06(金) 07:09:22.82ID:WyNOk6KOVBAでクラスやコレクションやディクショナリを使ったことはないな。
配列をすべて1次元に統一しておいた方が再帰処理とかしやすいような気がしてきてる。
0353デフォルトの名無しさん
2015/02/06(金) 08:35:01.78ID:Uk3UX5SKそのボックスの右のボタン(Button2)を押したら、別ブックのセルA2にそれを入れる仕様
Private Sub Button2_click()
If TextBox2.Text = "" Then Exit Sub
Workbooks("書類作成").Worksheets("送り状").Range("A2") = TextBox2
Unload Me
Workbooks("一覧表").Close
End Sub
これでA2に入力はされるんだけど、それをF2キーを押して編集しようとすると
必ず固まって強制終了するんだけど、何がまずいの?
0354デフォルトの名無しさん
2015/02/06(金) 08:57:43.16ID:kGu0ocwH0355デフォルトの名無しさん
2015/02/06(金) 12:32:58.10ID:My4Umhjn別に統一性が取れていれば再帰は関係ないかな。
つまり役割ごとに違うクラスやメソッドを作って、その中で使い回せるところは別に切り出して使い回せってこと。
別に何でもかんでも1次元配列でやろうって訳じゃないだろ
0356デフォルトの名無しさん
2015/02/06(金) 13:12:24.10ID:0+nTrOfHとなりにあるコマンドボタンを押したことにさせるにはどうしますか?
0357デフォルトの名無しさん
2015/02/06(金) 13:25:49.45ID:NoLWhCAxテキストボックス内でEnterキーを押されたら、コマンドボタンを押したときに実行される内容を呼び出す。
0358デフォルトの名無しさん
2015/02/06(金) 14:05:20.82ID:0+nTrOfH0359デフォルトの名無しさん
2015/02/06(金) 14:10:59.63ID:0+nTrOfHクラスの中に他のクラスをプロパティとしてつかういわゆる集約という使い方はできないのですか?
エラーが出ちゃいます。
0360デフォルトの名無しさん
2015/02/06(金) 14:18:33.05ID:NoLWhCAxggrks
>>359
できる
やり方はggrks
0361デフォルトの名無しさん
2015/02/06(金) 14:35:30.56ID:0+nTrOfHdmrks
0362デフォルトの名無しさん
2015/02/06(金) 14:55:27.75ID:NoLWhCAx0363デフォルトの名無しさん
2015/02/06(金) 18:13:25.00ID:My4Umhjn型やスコープはあってるの?
どんなエラーメッセージが出てる?
0364デフォルトの名無しさん
2015/02/06(金) 18:19:16.08ID:0+nTrOfHふつうのはできてるけど
Collectionをクラスのプロパティにするとエラーがでちゃうんですよ。
0365デフォルトの名無しさん
2015/02/06(金) 18:35:37.12ID:NoLWhCAx0366デフォルトの名無しさん
2015/02/06(金) 21:47:23.64ID:WyNOk6KOメインの言語は別にあって、Excel/VBAは手元のデータの取り回しに特化してる。
だからVBAでクラスやメソッドをつくるのはちょっと遠慮しておきたいな。
なんでもかんでも配列でやっているんだけど、多次元のうっとうしさが嫌になってきてる。
とは言え「表」計算ソフトなんで、2次元の表という形式からは離れがたい。
0367デフォルトの名無しさん
2015/02/06(金) 23:11:57.30ID:WyNOk6KO作った関数に配列を渡したとき、次元に関わらず同じ意味のことをやれるなら問題ないけど、そうじゃないことも多い。
2次元の時は、処理を縦に適用するのか横に適用するのかという(1次元の場合にはない)問題が発生して、
それを指定するための引数が余分に必要になったりする。
0368デフォルトの名無しさん
2015/02/06(金) 23:47:26.16ID:d0YfM+I8例えばAというシートとBというシートにそれぞれ一覧を出力したいとする。Aには1行、Bには複数行出力するとして、
出力位置も違えば計算方法も違う。でもシートに出力するという意味では同じ。
そうしたとき、同じ関数でまかなう?違う関数を呼びだす?違うクラス作る?
0369デフォルトの名無しさん
2015/02/07(土) 00:17:28.66ID:2PYtlFBn事前の計算から出力まで一体化するわけじゃないんだろ?
出力だけならどちらも
Range( X ).Value = data
という同一の式で書けるんだから、同じ関数だろう。
dataの中身が何行あるかで分けるなんてナンセンス。
0370デフォルトの名無しさん
2015/02/07(土) 02:16:49.45ID:0QjeMX7S何を言わせたいのか分かるけど、敢えて何も言わない
俺もどんなレスがつくか生暖かい目で見守ってたい
0371デフォルトの名無しさん
2015/02/07(土) 07:29:05.15ID:2PYtlFBn>>370
計算方法が違うなら3段階に分けるだろ。
処理Iと処理Oは共通。そういうことが聞きたいのか?
シートから入力 | 処理I(引数:入力レンジ)
--------------------------------------------------
計算 | 処理C1 処理C2
--------------------------------------------------
シートへ出力 | 処理O(引数:出力レンジ)
どっちにしろワークシートとのI/Oは2次元なんだから、こういう部部分で次元について悩む要素はない。
そういうのと関係ない部分では多次元は扱いづらい。
0372デフォルトの名無しさん
2015/02/07(土) 07:37:32.14ID:2PYtlFBn処理O(引数:出力レンジ、引数:出力データ)
0373デフォルトの名無しさん
2015/02/07(土) 08:07:29.99ID:0QjeMX7S0374デフォルトの名無しさん
2015/02/07(土) 08:18:10.07ID:2PYtlFBn睡眠時間足りなくないか?
0375デフォルトの名無しさん
2015/02/07(土) 08:23:41.74ID:0QjeMX7S0376デフォルトの名無しさん
2015/02/07(土) 08:38:47.99ID:2PYtlFBn0377デフォルトの名無しさん
2015/02/07(土) 08:53:35.23ID:0QjeMX7Sだからクラスやら関数やらって持って回った言い方してるんだろう。
0378デフォルトの名無しさん
2015/02/07(土) 11:39:31.01ID:4S24w56CType Person
Index As Integer
Name As String
Age As Integer
・
・
End Type
で定義。
そしてこれを
Dim Person(100) as Person
で使うとします。
PersonをAge順でソートしてその順番にIndexを1から順番に1,2,3,4,5・・・と代入するには
どうすればいいですか?
既存の機能みたいなのがあればいいのですが、なければ自作するしかないのかなと思ってますが。
0379デフォルトの名無しさん
2015/02/07(土) 11:42:33.00ID:pGoj+FY2規模による
ノンストップサーバーで常時動作するアプリなら丁寧に開放すべき
でもExcel VBAをそんな場面で使っちゃダメかと
0380デフォルトの名無しさん
2015/02/07(土) 11:48:39.28ID:pGoj+FY2そのパーソンのデータは元々何処に存在する?
DBならSQLでソートして取得、Excelシートならマクロでソートして取得する
VBAだけでやるなら通常のソート使う
0381デフォルトの名無しさん
2015/02/07(土) 16:04:26.64ID:HrLZN6WDActiveChart.SetSourceData Source:=Range("G1:G10") ならできたのですが
ActiveChart.SetSourceData Source:=Range(Cells(3, 3), Cells(N + 2, 3)) のように書くと
'cells' メソッドは失敗しました とエラーが出ます。後者の書き方はできないのでしょうか。
0382378
2015/02/07(土) 16:08:29.07ID:4S24w56C説明を超簡単にするため仮にPersonの例を出しただけで実際は全く違うしかなり複雑なんです。
なので一般的に構造体のある1つの要素でソートしてその並んだ順に番号を振るという動作を実現したい。
(そりゃ上のPersonの例だと元のシートがありそうだからそこでソートしたら簡単だよね)
もし例えるなら
ある長文文書のカタカナだけを構造体KanaWordで取り出し
重複して取り出したカタカナ語をどうにかしたいからその出現回数でソートし
それについて連番をつけることによってName+Indexの組み合わせをユニークにしたいんです。
0383デフォルトの名無しさん
2015/02/07(土) 16:28:12.16ID:L56gFTsWN の値がおかしいんじゃないのか?
まずは、定数で試してみなよ
0384デフォルトの名無しさん
2015/02/07(土) 17:01:06.53ID:HrLZN6WD定数にしてもエラーになってしまいます(´・ω・`)
0385デフォルトの名無しさん
2015/02/07(土) 17:42:17.05ID:HrLZN6WDhttp://www.excel.studio-kazu.jp/kw/20040602163036.html
シートを指定すればいいそうです。
(略):=Range(Sheets("2").Cells(3, 3), Sheets("2").Cells(N + 2, 3))
これだとエラー
(略):=Sheets("2").Range(Cells(3, 3), Cells(N + 2, 3))
バージョンはエクセル2003なのですが、新しいバージョンならシート指定しなくてもいいんですかね?
新規作成するときは :=Range(Cells(3, 3), Cells(N + 2, 3)) でいけたんですが
範囲を変更するにはシート指定しないといけないってちょっと面倒(´・ω・`)
0386デフォルトの名無しさん
2015/02/07(土) 18:03:57.62ID:0QjeMX7S自分でつくるか.Net化することを祈るしかないな
0387デフォルトの名無しさん
2015/02/07(土) 18:12:47.55ID:0QjeMX7SWithで前のRangeにも後ろのCellにも掛かるように書いておいた方がいいんじゃない?シートじゃなくブックごと。
0388デフォルトの名無しさん
2015/02/07(土) 19:35:24.45ID:MiKLeMlVVBAそのものにソート機能は無い
>>385
そのコードが書かれていたモジュールによってどのシート見るか変わる
指定しなければ動かないというわけではないが
解らないなら全部シート指定しといたほうが無難だぞ
0389デフォルトの名無しさん
2015/02/07(土) 19:44:32.51ID:HrLZN6WDありがとうございます。
指定してやります。
0390デフォルトの名無しさん
2015/02/08(日) 11:27:49.95ID:7++NHH4wそれだと最初に取り出す時に正規化で抜けそうやね
で、構造体の要素に比較格納すれば同時にカウントもできる
0391デフォルトの名無しさん
2015/02/09(月) 08:30:34.40ID:+ZaMOdKKあなたの言ってることは構造体の列にランキングを付けたいということだけど、実際に並べかえたいのか、ランキング付けだけでいいのか。
0392デフォルトの名無しさん
2015/02/10(火) 21:06:45.70ID:v+Odw02j作りきってしまった感がある
VBAで組んで初めて人に褒められた時は超楽しかったはずなのに…
0393デフォルトの名無しさん
2015/02/10(火) 23:01:15.47ID:REXxw1bPゲームでも作ったらみんな驚くぞ
まずはテトリスあたりが簡単そうだな
ゲームプログラミングがキッカケで新しいネタ思いつくかも
このゲームのこの処理はあの業務の改善にも応用できるぞ、とか
0394デフォルトの名無しさん
2015/02/10(火) 23:32:09.67ID:QamkDOo/今までどんなの作った?
0395デフォルトの名無しさん
2015/02/11(水) 02:18:59.86ID:WrS2F/u8多分もう次のステップに進む時期が来てるんだよ。
一度Object指向言語やってからまたVBAやってみると、今までの組み方とまた全然違う
組み方で組めるようになるし、より効率のいい方法をチョイス出来るようになる。
>>393
そう思ってテトリスやアクションゲーム作った時期があったけど、あまり業務には繋がらなかったかな。
座標計算がおもだし、APIも業務で使うAPIとは毛色が違うし。
0396392
2015/02/11(水) 04:25:38.05ID:OQ+aNcDd今までは以下のことをしてました。
・DB(Access)やcsvから必要なデータを抽出・集計して目的の資料(工程表、請求書、クレーム管理表、csv)をワンボタンで作る機能
(DBはDAOやADOで接続)
・入力フォームがあるExcelやcsvからDBにデータを格納する機能
・AccessVBAで、更新クエリを連続で行い、基幹システムのデータベースサーバーのデータを抽出
・社内にあるNASの容量監視
・OutlookVBAで誤送信防止や重すぎるファイルを送ってないかのチェック機能
・メールアドレス一覧表を送って、選択したメールアドレスをOutlookの連絡先に追加、削除する機能
・VBScript、VB.NETを使った営業所間のファイルコピーバッチ処理
こう見ると、随分officeとvbに毒されてるなぁ、スレ違いの内容も多々ありますね…
IE・HTML操作はしたことないですけど、活用されてる方っていますか?
0397デフォルトの名無しさん
2015/02/11(水) 07:11:39.99ID:WrS2F/u8あー、VBAじゃ確かにWebのサイトやページ見に行くことはあってもそれらを構成して扱うようなことはしないからなぁ。
そっちに興味があるならVB.Netの経験あるみたいだし、ASP.Netやってみれば?
HTMLやJavaScript、IISとかの知識が必要になるけど、あの辺はまぁSQLとかみたいに
最初でもその場凌ぎでそこそこ何とかなるもんだし。
0398デフォルトの名無しさん
2015/02/11(水) 13:36:28.94ID:qmuMcExTリアルでカンストってすごいじゃんw
0399デフォルトの名無しさん
2015/02/11(水) 23:58:32.19ID:GkIWFUyF0400デフォルトの名無しさん
2015/02/12(木) 15:34:43.50ID:Qj2+qwXZ画面サイズ(フォームのウィンドウサイズ)をどうするか悩んでいます
それぞれ違うPCであるので、機種により解像度はバラバラで最適なフォームのサイズを決めるのは
無理だとは思うのですが、基本的なサイズ(割と出回ってるPCを想定して)はどの程度でしょうか?
Windowサイズを取得してそれにあわせて調整する手法もあるようですが、
無難なサイズで決め打ちするとしたらどれくらいのウィンドウサイズが限界でしょうか
いまのところ幅800高さ600程度で作っており、あとはFormプロパティのZoomを使って
利用者が好きなサイズに調整してもらう(システム設定などを設けて)のが良いかなとおもってるのですが
0401デフォルトの名無しさん
2015/02/12(木) 17:08:34.82ID:HJuTvgcS0402デフォルトの名無しさん
2015/02/12(木) 20:34:11.54ID:UIrtzQjf大体の規格は決まっているんだから。
0403デフォルトの名無しさん
2015/02/12(木) 21:55:05.40ID:JYibxDvkそれくらいなら大丈夫だろ。
んで、コントロールを詰め込みたいならマルチページで(使い勝手がどうなるかは知らんけど)
0404デフォルトの名無しさん
2015/02/12(木) 22:42:46.58ID:0MvvafYQ0405デフォルトの名無しさん
2015/02/12(木) 23:21:06.49ID:yvPuD0M1対応アプリ少ないし情弱ホイホイだよね
0406デフォルトの名無しさん
2015/02/13(金) 00:18:41.02ID:WPkK2771正規表現にて下記パターンのテーブルデータを抜き出したいのですが、
どのように修正すればよいでしょうか?
//抜き出したいパターン
<td class="tal">2007年12月14日</td>
<td>0.48倍</td>
<td>86.47倍</td>
<td>2.20倍</td>
<td>2.41%</td>
<td>380.0円</td>
<td>316.6円</td>
//抜き出したいパターンここまで
正規表現は以下の通りです。
.Pattern = _
">(\d{4})年(\d?\d)月(\d?\d)日<[\s\S]+?" & _
">([0-9,.\-]+)倍<[\s\S]+?" & _
">([0-9,.\-]+)倍<[\s\S]+?" & _
">([0-9,.\-]+)倍<[\s\S]+?" & _
">([0-9,.]+)%<[\s\S]+?" & _
">([0-9,.]+)円<[\s\S]+?" & _
">([0-9,.]+)円<[\s\S]{7,30}?"
0407デフォルトの名無しさん
2015/02/13(金) 00:19:56.57ID:WPkK2771//不本意に抜き出されるパターン
<td class="tal">2015年01月13日</td>
<td>207.0円</td>
<td>207.0円</td>
<td>206.0円</td>
<td>206.0円</td>
<td>206.0円</td>
<td>7,800株</td>
//途中省略
<td class="tal">2007年12月14日</td>
<td>0.48倍</td>
<td>86.47倍</td>
<td>2.20倍</td>
<td>2.41%</td>
<td>380.0円</td>
<td>316.6円</td>
//不本意に抜き出されるパターンここまで
0408400
2015/02/13(金) 00:56:40.40ID:88+vWfY0HDが結構多いようですね
高さ1024、幅を768の解像度を最低ラインにおいて表示しきれるサイズに設定
あとは拡大で対応することにしました
環境依存かはわからないのですが、どうもZoom使うと縮小で文字がつぶれやすく
拡大ならあまり違和感がないように思えるので・・・
0409デフォルトの名無しさん
2015/02/13(金) 01:33:27.21ID:h7QHBloiタグを、<[^>]+>に変えりゃいいだけじゃね?
0410デフォルトの名無しさん
2015/02/13(金) 01:53:27.97ID:HSv1A/XD0411デフォルトの名無しさん
2015/02/13(金) 17:25:45.77ID:oMBvQyXeはいざんねーん
Excel VBA 質問スレ Part36 [転載禁止]©2ch.net
http://peace.2ch.net/test/read.cgi/tech/1419718732/l50
0412デフォルトの名無しさん
2015/02/13(金) 22:42:05.64ID:WPkK2771ありがとうございました。自己解決いたしました。
0413デフォルトの名無しさん
2015/02/13(金) 22:55:29.57ID:9Fk2rE3h0414デフォルトの名無しさん
2015/02/14(土) 00:18:12.33ID:QDZ5YXBX彼女が出来てチョコが貰えるような
プログラムを教えてください
0415デフォルトの名無しさん
2015/02/14(土) 07:40:45.98ID:KHQ6ogQmネタにマジレスしちゃうが
以前Excel教えたのがきっかけで告られた
自分が教えられるレベルになるのが早道
0416デフォルトの名無しさん
2015/02/14(土) 18:06:45.77ID:ftV3bqT6xlsだと明らかに動作が遅く、容量もでかくなってしまいました
組織内のある程度の人数に配布して使うこと予定していますが、office2003にも対応させるためxlsで配布すべきでしょうか?
XPもOffice2003もサポート終了しているので、2007以降の使用推奨でxlsmでいってもよいものでしょうか
1.xlsmで配布し、office2003(XPでは使用しないよう指導しているため)はおそらく少ないので、起動しなかったものにのみ
互換のパッチをインストール入れるよう指導 (互換パックで果たして問題がでないか)
2.xlsで当分配布し続ける (大勢の2007以降のユーザが重くなる・・・)
3.xlsmとxlsの両バージョンを作成して配布する (修正漏れや手間の増大)
素人考えでは1でいいかと思っているのですが、皆様のご意見をお聞かせ下さいませ
0417デフォルトの名無しさん
2015/02/14(土) 18:30:19.00ID:7Vd0Rb/A貴方の所属している部署で話し合って解決すべき問題じゃないのか?
0418デフォルトの名無しさん
2015/02/14(土) 19:00:02.61ID:V3WmF4i9動くかどうか知らんが、互換パックで2003でxlsm動かしたら遅くないのか?
そのへんまずちゃんと調べるべきじゃないかね
ファイルサイズは圧縮の問題もあるからxlsの方が大きいのは解るが
そのファイルサイズ差で読込の時間差が体感できるほどでかいのか
0419デフォルトの名無しさん
2015/02/14(土) 19:01:32.41ID:ftV3bqT6使う状況はそれぞれ個人のPCで、あくまでもお助けツールに配るものです
使う対象者も、officeのバージョンと言われて??となるものがほとんどです
そもそもPCに触ることが少ない業種で、私が日曜大工的につくってるので協議自体きびしいので
企業のプロの皆様がどのように協議されて仕様を決めていらっしゃるのかをお聞きしたいところなのです
0420デフォルトの名無しさん
2015/02/14(土) 19:05:06.75ID:ftV3bqT6一番重く感じるのは保存のときです
xlsmではほぼ一瞬で保存できるのですが、xlsでは5秒ほどかかります
保存のコードもWorkbookをSaveさせてるだけでごくごく単純なモノです
0421デフォルトの名無しさん
2015/02/14(土) 19:21:07.27ID:7Vd0Rb/A2007以降が動作しているPCで入力させるようにする
開発するのは2007以降のExcelのみ
「PCに触ることが少ない業種」というのなら、それでも大丈夫なんじゃ?
とにかく3の両方のバージョンで開発…ってのはやるべきじゃないよ。
0422デフォルトの名無しさん
2015/02/14(土) 20:57:56.01ID:GhXkSxmT0423デフォルトの名無しさん
2015/02/14(土) 21:26:57.97ID:KHQ6ogQm2003でも使う可能性がゼロでなければ2003でxlsを作るべき
0424デフォルトの名無しさん
2015/02/14(土) 22:45:21.66ID:QDZ5YXBX0425デフォルトの名無しさん
2015/02/14(土) 23:40:58.12ID:1Y81Pu5O0426デフォルトの名無しさん
2015/02/15(日) 00:26:48.50ID:sUCb2gvvなるべくシートを増やさずに1枚のシートにとにかくまとめるように書き上げていくのでは
どちらがお勧めでしょうか?どちらもデーター量は同じですが
配列でシートを無制限にわけて記載しているとすぐに100とか200になり動きがのろのろになりErrorを出し始めます
かといって1枚のシートにびっしり書いても見るのが大変なような気がしますが
こういう場合プロの型はどう考えますか?アドバイスをお願いします。
0427デフォルトの名無しさん
2015/02/15(日) 00:30:21.52ID:OSP9f7zT0428デフォルトの名無しさん
2015/02/15(日) 00:44:56.37ID:sUCb2gvvVBAで大きなデータを集計しているとシート100以上はだんだん当たり前になってきました。
0429デフォルトの名無しさん
2015/02/15(日) 00:52:00.98ID:sUCb2gvvちなみに集計が終わるまで数時間〜数日かかりますw
0430デフォルトの名無しさん
2015/02/15(日) 03:34:07.74ID:2k7M9Vvu速度もとめるならなるべくセルのアクセスはするな
それでもダメならDB使えと言う事だな
0431デフォルトの名無しさん
2015/02/15(日) 05:02:11.90ID:5a321sUWExcel VBA 質問スレ Part36 [転載禁止]©2ch.net
http://peace.2ch.net/test/read.cgi/tech/1419718732/l50
0432デフォルトの名無しさん
2015/02/15(日) 12:25:24.24ID:iNvc7Ap0>どう考えますか?アドバイスをお願いします。
データベースを使え
以上
0433デフォルトの名無しさん
2015/02/15(日) 12:46:17.07ID:hX4FLjKV禿同
0434デフォルトの名無しさん
2015/02/15(日) 12:46:20.59ID:GXmLhnKq禿同
0435デフォルトの名無しさん
2015/02/15(日) 12:59:47.80ID:GXmLhnKqVBA部分を最低限に留めて関数使うとか
あるいはEXCEL自体4つ起動してマルチプロセスなんて手も
0436426
2015/02/15(日) 13:44:19.13ID:ewrQ2M2IExcelはシートを大量に増やすとデーターを記入してなくてもそれだけ保存に時間がかかり始める
1シート可能な限りびっしり書いてタブを少なくする方が多少保存時間が短くなり有利と見た。
あくまでも仮設ですが
異論はありますか?
0437デフォルトの名無しさん
2015/02/15(日) 14:15:12.89ID:+57Y18Mn0438デフォルトの名無しさん
2015/02/15(日) 14:30:25.82ID:sEjoCWJqあと書式は保存する必要ないから
必要な時に書式設定し閉じる前に書式クリアするとか
0440デフォルトの名無しさん
2015/02/15(日) 18:01:15.58ID:MngQp/hY0441デフォルトの名無しさん
2015/02/15(日) 20:15:18.71ID:5a321sUWExcel VBA 質問スレ Part36 [転載禁止]©2ch.net
http://peace.2ch.net/test/read.cgi/tech/1419718732/l50
0442デフォルトの名無しさん
2015/02/15(日) 21:02:46.85ID:8LRSDeDaApplication.ScreenUpdating=False
荒しはスルーで
0443デフォルトの名無しさん
2015/02/15(日) 21:19:10.09ID:5a321sUWExcel VBA 質問スレ Part36 [転載禁止]©2ch.net
http://peace.2ch.net/test/read.cgi/tech/1419718732/l50
0444デフォルトの名無しさん
2015/02/15(日) 21:30:42.70ID:uqlijj6VApplication.ScreenUpdating=False
0445デフォルトの名無しさん
2015/02/15(日) 21:41:52.18ID:+PYg4EOnってちょっと気持ち悪い
0446デフォルトの名無しさん
2015/02/15(日) 22:05:42.98ID:kxXNdknJExcel VBA 質問スレ Part36 [転載禁止]©2ch.net
http://peace.2ch.net/test/read.cgi/tech/1419718732/l50
0447デフォルトの名無しさん
2015/02/16(月) 16:58:53.02ID:H/rtMJFzほぼ組み上がったところでセルの文字列表示が1024字までというのを知り途方に暮れています
加えて256文字以上1024文字以下で######になるという記事も見つけ
入力させる項目の一つには500字程度や1024字を超えるものもあり、どうしたものかと・・・
作成したシステムは、入力フォームに配置したテキストボックスに文章を入力
入力した文字列は該当セルに記録し(他項目もあわせてデータ用のシートに保存)
印刷はテンプレートを作っておいて、データシートのセルの値をテンプレートシートに入れていき
文字数に応じてフォントサイズを調整して、プレビュー確認という感じでプログラムしてます
Office2007や2003のパソコンでも使う予定なのですが、何か対策はないでしょうか
0448デフォルトの名無しさん
2015/02/16(月) 17:59:00.55ID:yfdXomUcEXCELはワープロソフトじゃない訳で文字数制限がきついのはどうしょうもないかと
1セルに全部いれるんじゃなくて制限超えないように 数セルに分けるのはどうなのよ?
あと
そもそも WORDでやる案件のような気もするんだけどWORDじゃだめなん?
0449デフォルトの名無しさん
2015/02/16(月) 18:49:26.10ID:H/rtMJFz> 数セルに分ける
しかないですかね・・・
問題は文章中に改行もあるので、固定値で区切って次のセルに流すと、文の途中で
改行されてしまうので、ある程度の文字数で改行のある区切りを検査して切り分けて
それをセルに順次分けて流し込む ような感じでしょうか・・・
あとは#になる仕様(バグ?)対策に、書式設定を文字列ではなく標準にしないとでしょうか
ただ、流し込む枠(印刷レポートの書式)が既に運用されていて変更できないので、
文字数にあわせて文字サイズとさらに分けているセルの高さも考慮してはめ込まなければならない上に
文字サイズを調整した文章に、さらに枠全体に配置するために垂直の均等割り当てをしていたのですが、
複数のセルにまたがるとなるとそれもできないですね・・・ 困りました・・・orz
0450デフォルトの名無しさん
2015/02/16(月) 19:51:35.23ID:GvyW2zIK0451デフォルトの名無しさん
2015/02/16(月) 20:58:57.53ID:xdM8JK5oでっかいラベルをシートに置いて、そこに表示させれば?
ページが分かれる可能性があるなら幾つも作っておくとか
セルほどの柔軟性はなくなるけど、まぁなんとかなるんじゃないか
コードはこんな感じ
ActiveSheet.DrawingObjects("ラベル 1").Text = "テキスト内容"
0452デフォルトの名無しさん
2015/02/16(月) 21:38:57.85ID:dgZM3/Bj0453デフォルトの名無しさん
2015/02/16(月) 21:39:47.72ID:x+zyA1Lt0454デフォルトの名無しさん
2015/02/17(火) 00:12:30.43ID:146t/jKa複数セルを結合して使っちゃダメなの?
0455デフォルトの名無しさん
2015/02/17(火) 01:35:26.10ID:lrt7cu1fおおもとのプロシージャAからプロシージャBを抜き出しそれをAから呼び出すことにしました。
しかしここで問題が。
BにはAで使ってた変数がたくさんあります。
でもAとは分裂してしまったのでAへのたくさんの変数の参照ができなくなりました。
こういうのって、どうやって解決するのが定番なのですか?
まさかAの変数をすべてグローバルにするの?
グローバル変数というのも使わないほうがいいと言うので困っています。
0456デフォルトの名無しさん
2015/02/17(火) 04:05:11.02ID:X2MoRgQWggrks
VBA 変数 スコープ
0457デフォルトの名無しさん
2015/02/17(火) 05:33:38.22ID:or7h50KGグローバルはpublic、モジュール内全体はprivate、プロシージャ内はautoと三種の参照範囲があるから、それで頑張るくらいかな
VBAで小規模なら細かく分ける必要も無いと思うけど
0458デフォルトの名無しさん
2015/02/17(火) 07:19:27.06ID:9NYC6Wy0出力エリアがきまってるなら、それに収まる程度に入力を制限するのが普通だろ
>>455
役割ごとにちゃんと分割できてれば、Bの役割に必要な情報をBへの引数で渡すのが一般的
もしBが大量の(A内の)変数を見ないとダメなら、そもそもの機能分割がちゃんとできてない
0459デフォルトの名無しさん
2015/02/17(火) 08:52:30.90ID:4e4VuLTt結合すれば1024を超えて表示が可能でしょうか?
今のところ2セルを結合しています
>>458
エリアが決まっているので文字数で文字サイズに応じて調整+均等割り付けで
体裁を整えるというように組んでいますが、
業務上、何文字以内という制限を設けるわけにはいかないので・・・
もともとワードでやっていたのですが、文字数のばらつきが多く、
あまりPCに詳しくない利用者が文字サイズや行間の調整ができないので
自動で全てまかなう為にフォームで入れさせて印刷するために設計してます
0460デフォルトの名無しさん
2015/02/17(火) 09:51:43.90ID:CCisoKxZ0461デフォルトの名無しさん
2015/02/17(火) 11:31:05.37ID:X2MoRgQW0462デフォルトの名無しさん
2015/02/17(火) 11:56:41.84ID:LFQwlpntイメージと実態が異なってるかもしれないので聞きたいんだけど、
・元のプロシージャは大体何行くらいか?
・たくさんの変数って大体何個くらいか、配列は使っているか?
0463459
2015/02/17(火) 12:11:55.22ID:GkDdPpGyそんな殺生なorz
古いPC引っ張り出してExcel2007で試してみたんですが、
確かに書式設定を「文字列」にすれば2000字くらい入れたセルは
########と表示されるんですが、「標準」にしてあげれば
表示されるんですが、どういうことでしょう
文字サイズを小さくして1セル内に入りきる調整はいりますが、
入ってしまえば1024も軽く超えて表示できてますし、プレビューでも表示できてる
0464デフォルトの名無しさん
2015/02/17(火) 12:14:07.07ID:GkDdPpGy0465デフォルトの名無しさん
2015/02/17(火) 15:49:10.19ID:875KssuY1行の文字数上限決めて、上限超えた文字は下の行に強制改行していけばいいんじゃねーの?(鼻ほじ
あとは WordVBA で範囲内の書式をクリアするってのがあるから
逆に範囲内の書式を設定することできるんじゃね?
Word持ってない・使ったことないから詳しくは知らんけど
0466デフォルトの名無しさん
2015/02/17(火) 17:08:53.70ID:ScAGgWPEexcelのuserformで作成してみたのですが、よくわからなくて。
オプションボタンをクリックするとコンボボックスの選択していたrowsourceが出てくるのですが。
そこで出てきたコンボボックスの値を確定ボタン(コマンドボタン)をクリックしたときにB2に打ち込まれるようにしたくて打ち込まれたら次のB3、b4という感じに繰り返して、閉じるボタンを押すまで打ち込める状態にしたいのですが。
どういう関数なら打ち込めるのかわかりません。長文&説明下手なのでよくわからないかもですが、教えてください
0467デフォルトの名無しさん
2015/02/17(火) 18:05:57.87ID:jRndRgSB0468デフォルトの名無しさん
2015/02/17(火) 20:50:40.68ID:MwEIMFRH> プロシージャ内はauto
いつの間にそんなもんが
0469デフォルトの名無しさん
2015/02/17(火) 23:48:47.02ID:6KvLI8HS古い知識(auto変数)で書いたんだけど、プロシージャ内のdimは正式には何て言うの?
0470デフォルトの名無しさん
2015/02/17(火) 23:50:19.47ID:wuWlXvwRセルへのアクセスを減らすとスピードが速くなるという書き込みを過去コメントで見ましたが
Dim で変数を定義していくとして実用範囲で最大何個ぐらいまで定義できるのでしょうか?
今構想中の計画では2500必要であることがわかったのですが2500個定義することは可能なのでしょうか?
詳しい方いらっしゃいましたら宜しくお願い致します。
0471デフォルトの名無しさん
2015/02/17(火) 23:55:06.61ID:6KvLI8HSその変数のサイズ×配列数が2GB内
0472デフォルトの名無しさん
2015/02/18(水) 00:00:43.15ID:0d8GWwAd2000MBの2GBですか?でしたら膨大ですね。
定義するのは桁数の少ない自然数なので2500個は全く問題無さそうですね。
ありがとうございます。
0473デフォルトの名無しさん
2015/02/18(水) 00:29:38.42ID:FooM0Je6古いも新しいもVBAやVBにauto変数なんてないわ
VBAでの変数のスコープは一般的にはプロシジャ(プライベート)、モジュール、パブリックだ
正確にはヘルプの「適用範囲と参照可能範囲の概要」みると
>プロシージャ レベル、プライベート モジュール レベル、およびパブリック モジュール レベルがあります
って書いてあるがな
0474デフォルトの名無しさん
2015/02/18(水) 00:30:26.31ID:LcW7LB/Iいくつかの数値を纏めて格納する 方法として、リスト()形式と、コレクション形式というのがあると聞きました。
格納が終わったあとで、入っている数値を、昇順に並べ替えて取り出したい場合は、どうすれば上手くやれるでしょう?
たとえば、1を格納、5を格納、3を格納、とやった後に、「135」と並べ替えて出力したい場合などです。
よろしくお願いします。
0475デフォルトの名無しさん
2015/02/18(水) 00:43:05.77ID:FooM0Je6リスト()形式って何か知らんが
VBAにそのような機能はありません
自作するか、エクセルシートで代用するか、外部ライブラリ使うかして下さい
0476デフォルトの名無しさん
2015/02/18(水) 01:24:18.41ID:hnIb3krlFor i = 1 To 100
Dim j As Integer
Next i
のようにForブロック内で宣言した変数jは
Forブロックの外でも使えますか?
0477デフォルトの名無しさん
2015/02/18(水) 01:47:08.51ID:FooM0Je6宣言より後なら使える
0478デフォルトの名無しさん
2015/02/18(水) 04:20:36.63ID:qJod6Zoi配列にソートという関数は無いの?
Rubyで言うと、Arrayクラス.sort
0479デフォルトの名無しさん
2015/02/18(水) 08:22:38.53ID:yLcFaQ17ない
VBAって参照を返せないのがなんとも不便だよなあ。ByRefで受け取った大きな配列をByRefで出力する方法はないものか。
これがあればパイプ処理できるのに。
0480デフォルトの名無しさん
2015/02/18(水) 08:44:07.09ID:Lm/UpLLWローカル変数でいいでしょ
特定の言語 (C/C++) の用語使うより全然マシ
0481デフォルトの名無しさん
2015/02/18(水) 08:57:16.29ID:mZTAkLE5自作するしかないね
0482デフォルトの名無しさん
2015/02/18(水) 09:00:07.27ID:Lm/UpLLW> ByRefで受け取った大きな配列をByRefで出力する方法はないものか。
同じ配列なら返さなくてもいいように思うが...
Variant 型は実質参照みたいなもんだから、これじゃダメ?
Sub T()
Debug.Print F()(55)
End Sub
Function F() As Variant
Dim A(100) As Intger
A(55) = "松井"
F = A
End Function
0483デフォルトの名無しさん
2015/02/18(水) 10:19:46.66ID:yLcFaQ17配列に対する操作を繋げたいんですよ。
func2(func2(func1(matrix)))
とやるとmatrixの3ヵ所が変更されるみたいに。
そのたびに新しく配列を作って返すんじゃ効率が悪いから、副作用ありで繋げる処理を書きたい。
0484デフォルトの名無しさん
2015/02/18(水) 11:41:15.32ID:yLcFaQ17func2(func2(func1(matrix)))じゃなくて
func3(func2(func1(matrix)))
0485デフォルトの名無しさん
2015/02/18(水) 11:41:27.73ID:Yek5NpLy他の言語は知らんけど
VBAでは配列変数はByRefでしか受け渡し出来ないんじゃなかったっけ?
0486デフォルトの名無しさん
2015/02/18(水) 11:48:28.31ID:QJoLg/2Bfunc1(matrix)
func2(matrix)
func3(matrix)
って書きたくないのかがわからん。
こっちのがどういう順番で何やってるか一目瞭然なのに。
0487デフォルトの名無しさん
2015/02/18(水) 11:51:14.19ID:yLcFaQ17x = x * 2 という式で各要素を2倍するなんてことができない。
そこをあきらめて y = x * 2 として別な配列に入れようと思っても、実際にやろうとすると y(i, j) って
書かなきゃならないが i と j を動かすスマートな方法がない。
0488デフォルトの名無しさん
2015/02/18(水) 11:57:49.28ID:yLcFaQ17受け取るときはByRefにすればいいんだけど、関数からreturnするときはコピーが作られちゃうんですよ。
出した例でいうと、func1した結果は引数matrixに反映されるけど、後続処理はコピーに対する処理となるので反映されないです。
0489デフォルトの名無しさん
2015/02/18(水) 12:12:57.43ID:a8UdE6sd俺はそうしてる
とても捗ってる
0490デフォルトの名無しさん
2015/02/18(水) 12:15:29.32ID:yrCv40dm0491デフォルトの名無しさん
2015/02/18(水) 12:16:44.52ID:a8UdE6sd0492デフォルトの名無しさん
2015/02/18(水) 12:18:55.27ID:yLcFaQ17たいていの処理を使い捨ての一行プログラムでこなせたりする?
0493デフォルトの名無しさん
2015/02/18(水) 12:26:58.19ID:BIe8ociqあれは自己参照かけるかな?
それはわからんが、できそうなのは配列の全要素を格納が期待できるバッファを用意して足らない部分を動的に確保する。
もうひとつはモジュール単位のproperty let get、と一時オブジェクトは避けられないかもしれんが、
setでargs + objectオブジェクトに参照をもたせるくらいか?
いずれにせよfortranのような参照がモダンな言語で無いのはほとんどの場合において資産。
0494デフォルトの名無しさん
2015/02/18(水) 12:27:29.75ID:zPrNzJwIそれで終わりだろ?
0495デフォルトの名無しさん
2015/02/18(水) 12:28:28.19ID:a8UdE6sdrubyだと
app.Selection.each{|cell| cell.Value = "hoge" if cell.Value =~ /hu*ga*/}
で選択範囲の"huuuuugaaaaa"を"hoge"にしたりとか色々
OLEで提供されてるオブジェクトはメソッド、プロパティ含めてほぼ制限なく使える
あと [1,3,6,2].sort とかも当然できるぞ!!
0496デフォルトの名無しさん
2015/02/18(水) 12:35:51.08ID:yLcFaQ17それをどこから(どういう環境から)実行するの?
対話的に実行できる?
0497デフォルトの名無しさん
2015/02/18(水) 12:36:13.41ID:YbJdAwW+0498デフォルトの名無しさん
2015/02/18(水) 12:48:44.92ID:a8UdE6sdirbっていう対話環境が標準で用意されてるからそこから操作できる
もちろんスクリプトファイルを作って実行もできる
具体的にコード書いちゃうと
require 'win32ole' #OLE操作のためのライブラリ読み込み
app = WIN32OLE.connect('Excel.Application') #今開いているExcelのApplicationオブジェクトを取得
あとは煮るなり焼くなり>>495だったり
この辺参考になるはず
http://magazine.rubyist.net/?0027-ExcellentRuby
http://www.boddie.org.uk/python/COM.html
0499デフォルトの名無しさん
2015/02/18(水) 12:51:26.25ID:a8UdE6sdExcelで完結しないから他人に配布するとかの用途には不向きだね
書き捨てのちょっとしたマクロには最適
0500デフォルトの名無しさん
2015/02/18(水) 13:39:13.16ID:QJoLg/2B0501デフォルトの名無しさん
2015/02/18(水) 13:41:20.01ID:QJoLg/2B今、C#でCOM経由でExcelを操作するアプリ作ってるけど、COMとの通信回数が増えると目に見えて遅くなる。
0502デフォルトの名無しさん
2015/02/18(水) 14:45:17.24ID:Lm/UpLLWVBA にはソートとかがないでしょ? って話だったかと。
まあ、俺はわざわざ Ruby とやらの環境を入れる気にはならんけどな。
0503デフォルトの名無しさん
2015/02/18(水) 14:51:33.82ID:QJoLg/2B> VBA にはソートとかがないでしょ? って話だったかと。
あ、そういう話だったか。
だったら、こういうのを使えるようになった方がいいと思う。
『.NET Frameworkを使う』
http://officetanaka.net/excel/vba/tips/tips98.htm
ArrayListを使った、Sort, Clone, Reverseの例が載ってる。
0504デフォルトの名無しさん
2015/02/18(水) 14:52:10.22ID:yLcFaQ17Rubyとか興味なくはないけど、一からやるとなると面倒だね。
VBAもツールが揃ってくると書き捨ての処理は一行プログラムで書けるようになってきて、そうなると参照返しが欲しくなる。
行を分けろと言うのは正論だけどさ。
0505デフォルトの名無しさん
2015/02/18(水) 15:25:22.43ID:a8UdE6sd例えば>>503のSample1なんてのは
datalist = Array.new(5){(rand*10000).to_i}
print [datalist.sort, "----", datalist.reverse].join("\n")
とたった2行で同じ出力が得られて捗る
0506デフォルトの名無しさん
2015/02/18(水) 15:48:01.19ID:QJoLg/2B> とたった2行で同じ出力が得られて捗る
いや、COMが扱えるRubyを使える環境にあって、Rubyのことも良く知ってるなら捗るだろうけど、
Ruby知らない人にはハードル高すぎ。
https://www.ruby-lang.org/ja/downloads/ の
ActiveScriptRuby
RubyInstaller
RailsInstaller
のどれでもCOMが使えるのかどうかとか、
そもそもCOMって何って人とか、
コマンドライン何それって人もいるかもだし。
0507デフォルトの名無しさん
2015/02/18(水) 15:59:54.78ID:SUifHOIO既に他の言語知ってたり、479みたいにVBAに不便さを覚えた人にはおすすめ程度
そういえばExcel関係ないVBAの話はこのスレではNGだけど、
Excel関係あるVBA以外の話はこのスレでいいの?
流石にrubyの話はスレ違いだと思うんだけど、Excelの操作、
マクロだと考えるとこのスレのような気もするし
0508デフォルトの名無しさん
2015/02/18(水) 17:43:29.73ID:TBGWIM9o入力するときに別のセルに入れてくれれば…と思うことしきりです…
0509デフォルトの名無しさん
2015/02/18(水) 17:44:02.68ID:PO1vEDuy0510デフォルトの名無しさん
2015/02/18(水) 17:50:58.57ID:QMIzQpCsかなり開発効率あがるんだが
MSさんおなしゃす
0511デフォルトの名無しさん
2015/02/18(水) 18:42:17.76ID:Z5m5h1Ujまぁ会社PCにrubyインスコできないから自分も使う機会ねーんだけどさ
TANAKAのこれhttp://officetanaka.net/excel/vba/tips/tips40.htm
組みなおして call で呼び出せば1行じゃないかやったね
0512デフォルトの名無しさん
2015/02/18(水) 18:42:36.36ID:99hPsA+1わかる
あとunicode対応してほしい
海外からマクロ動かないクレームが頻繁に来る
0513デフォルトの名無しさん
2015/02/18(水) 18:48:16.97ID:2rhvVJ3Z糞だろC#にしとけ
0514デフォルトの名無しさん
2015/02/18(水) 18:51:38.23ID:xzrnQB2I日本語使わなきゃいいじゃん
0515デフォルトの名無しさん
2015/02/18(水) 19:29:22.65ID:yLcFaQ17自分もdllいくつか使ってるけど結局は俺様ローカルな世界になっちまう。
0516デフォルトの名無しさん
2015/02/18(水) 20:24:24.68ID:+TVqHmXQ見た感じvisual studioでvb.net/c#での開発が出来るみたいだし、アドインだって作れそうだけど、活用してる人いない?
0517デフォルトの名無しさん
2015/02/18(水) 20:39:48.65ID:FooM0Je6Range.Characters で1文字ずつFont.Colorを調べれば出来ると思うけど
簡単にやる方法は無いんじゃないかな
0518デフォルトの名無しさん
2015/02/18(水) 21:47:43.19ID:ZsVgoINqVBAなんでも質問スレ
http://peace.2ch.net/test/read.cgi/tech/1342087380/
0519デフォルトの名無しさん
2015/02/19(木) 01:32:15.47ID:vu9Qsx5a悪い悪い、C言語やってたから(笑)
0520デフォルトの名無しさん
2015/02/19(木) 03:02:07.75ID:lDFiAK4+returnを使わないで、引数で、IN/OUTすれば?
f(ByRef in, ByRef out)
>>511
Macには最初から、Ruby, Pythonなども入っている
0521デフォルトの名無しさん
2015/02/19(木) 08:22:32.12ID:4dFHTBvUMSはVBAは廃止する方向性で取り組んでますよ。
オンライン版でスクリプトが無いのはその現れ。
プログラム組みたいなら、VS2013使ってろって話。
0522デフォルトの名無しさん
2015/02/19(木) 08:30:27.00ID:QTl9VVmV2007では機能していたモードレスの設定が、
2013では機能しなくなりました。
UserForm.show 0
コードはこれだけです。
別ファイルをアクティブにすると
フォームが裏に隠れてしまいます。
ウィンドウを上手く配置し、
ボタンが見えるようにしてクリックすると
別ファイルのアクティブシートを取得できます。
2007から2013で何か仕様変更があったのでしょうか?
0523デフォルトの名無しさん
2015/02/19(木) 08:46:33.76ID:4dFHTBvUhttp://www.asahi-net.or.jp/~ef2o-inue/kankyo/sub02_05_02.html
0524デフォルトの名無しさん
2015/02/19(木) 10:32:27.29ID:55lVElNxありがとうございます。
仕様変更があったのですね。
よく分かりました。
何か良い回避策はありませんでしょうか?
0525デフォルトの名無しさん
2015/02/19(木) 11:14:55.86ID:8gErZFsQ> 糞だろC#にしとけ
C#だと、いまだにReleaseComObject()地獄なんだよね。
そんなの無しにGCで解放してくれって思うんだが。
0526デフォルトの名無しさん
2015/02/19(木) 12:27:31.66ID:IuurH7h+たしかうまい回避策はなくて、他のアクティブシートでの処理が終わったら
ユーザーフォームと紐付いているブックを毎回アクティブに切り替える必要があったと思う。
0527デフォルトの名無しさん
2015/02/19(木) 16:24:48.21ID:NAyB84ut当方素人で、コードが違うからどうなのかわからんのだけど、
同じようにモードレスのフォームを開いた後、別シートを開いてから
元のフォームを操作するとインデックス範囲のエラーが発生するので
ThisWorkbook.Worksheets(〜〜と全部明示してみたら一応動作したように思えるけど
対応として大丈夫あってるのだろうか・・・
0528デフォルトの名無しさん
2015/02/19(木) 21:16:29.95ID:o2jUxII1MDI表示にするオプションとかないの?
フォームをシステムモーダルにする方法とかでもいいけど
それはそれで別の問題も出るだろうし
複数ブックいじるVBAとか結構影響でそうだな
0529デフォルトの名無しさん
2015/02/20(金) 00:08:26.48ID:Xi0Ydcd+亀レスだが、いま実装中。
なんとかVariantを参照で返せるようになった。あとちょっとだ。
m = 1
x = 参照(m)
?x
1
m = 2
?x
2
となる
0530デフォルトの名無しさん
2015/02/20(金) 07:44:51.60ID:LhrcWQ82レス下さった皆さん、ありがとうございます。
やりたいことは、アクティブシートに対して
モードレスなフォームのボタンをクリックすると
そのシートが処理されるというものです。
2013用にブック名、シート名のコンボボックスを
表示させようかと考えています。
次バージョンではどうなるのでしょうね。
0531デフォルトの名無しさん
2015/02/24(火) 12:32:13.53ID:nq42fo+uExcel2010
┏━━━━┓ ┏━━━━┓
┃A愛媛県┃ ┃B香川県┃
┗━━━━┛ ┗━━━━┛
┏━━━━┓ ┏━━━━┓
┃C高知県┃ ┃D徳島県┃
┗━━━━┛ ┗━━━━┛ ←コマンドボタン4個
ワークシート
A B C D
1 松山市 高松市 高知市 徳島市
2 今治市 丸亀市 室戸市 鳴門市
3 宇和島市 坂出市 安芸市 小松島市
4 八幡浜市 善通寺市 南国市 阿南市
5 新居浜市 観音寺市 土佐市 吉野川市
6 西条市 さぬき市 須崎市 阿波市
7 大洲市 東かがわ市 宿毛市 美馬市
8 伊予市 三豊市 土佐清水市 三好市
VBAを使って上の図のようなものを作りたいと思っています。
A列が愛媛県の市町村でB列が香川県の市町村というぐあいです。
そしてA1〜D8の市町村をランダムにE1に表示させます。
表示された市町村がどれであるか考えて上の4個のボタンのどれかを押します。
正解か不正解かはF1に表示させます。
この市町村当てクイズのようなものを作りたいのですが詳しい方いらっしゃいますか。
まずはE1にランダム表示させるところから学んでいきたいと思っています。
0532デフォルトの名無しさん
2015/02/24(火) 14:57:55.19ID:jA7JvUel【誤】
┏━━━━┓ ┏━━━━┓
┃A愛媛県┃ ┃B香川県┃
┗━━━━┛ ┗━━━━┛
┏━━━━┓ ┏━━━━┓
┃C高知県┃ ┃D徳島県┃
┗━━━━┛ ┗━━━━┛ ←コマンドボタン4個
【正】
┏━━━━┓ ┏━━━━┓
┃B愛媛県┃ ┃A香川県┃
┗━━━━┛ ┗━━━━┛
┏━━━━┓ ┏━━━━┓
┃C高知県┃ ┃D徳島県┃
┗━━━━┛ ┗━━━━┛ ←コマンドボタン4個
0533デフォルトの名無しさん
2015/02/24(火) 15:36:15.77ID:cA1xu2y/詳しくはないけど
>まずはE1にランダム表示させるところから学んでいきたいと思っています。
RND関数 てのがあるよ
0534デフォルトの名無しさん
2015/02/24(火) 15:52:09.13ID:8JogkC7z>そしてA1〜D8の市町村をランダムにE1に表示させます。
どのようなタイミングで表示するの?
例えば、一定間隔で表示し時間切れは不正解にするとか
0535デフォルトの名無しさん
2015/02/24(火) 16:41:06.64ID:FzvWfJKU初心者っぽいし作りやすい仕様を想定してあげよう
0536531
2015/02/24(火) 19:17:54.40ID:nq42fo+u次の問題ボタンを置こうと思います。
>一定間隔で表示し時間切れは不正解にする
そんなこともできるんですか。今回は時間制限はつけないでいいかと思っています。
0537デフォルトの名無しさん
2015/02/24(火) 20:49:49.67ID:PIm2u7Y8Sub Sample1()
Dim Button_Name As String
Button_Name = Application.Caller
MsgBox Button_Name
End Sub
Function makeRndInt(minInt As Integer, maxInt As Integer) As Integer
Randomize
makeRndInt = Int((maxInt - minInt + 1) * Rnd + minInt)
End Function
次の問題ボタンはA1〜D8のセルをランダムに抽出し、E1に表示する機能
回答ボタンは、どのボタンが押されたかを見て、対応する列名を取得し、A1〜D8範囲を探す機能を追加すればいいかと
0538デフォルトの名無しさん
2015/02/24(火) 21:05:22.03ID:8JogkC7zヒントです
Sub セル選択()
Cells(Int((8 * Rnd) + 1), Int((4 * Rnd) + 1)).Select
End Sub
0539531
2015/02/24(火) 22:27:48.47ID:nq42fo+uプログラムの文章をすぐに理解するのは難しいようです。
頂いたヒントをもとに勉強してきます。
0540デフォルトの名無しさん
2015/02/25(水) 14:00:38.12ID:aPhmfYhG0541デフォルトの名無しさん
2015/02/25(水) 14:25:46.10ID:lUiDnnd2元々VBA無くてもできそうじゃん
0542デフォルトの名無しさん
2015/02/25(水) 16:20:44.02ID:rpMKp3K50543デフォルトの名無しさん
2015/02/25(水) 16:38:07.73ID:oiOKwPPk恐喝ですか?
0544デフォルトの名無しさん
2015/02/25(水) 19:23:19.97ID:oz2nX22y0545デフォルトの名無しさん
2015/02/25(水) 21:19:48.54ID:eqSO3lN+0546デフォルトの名無しさん
2015/02/25(水) 21:21:30.78ID:hgjjK+Cd0547531
2015/02/26(木) 02:04:11.48ID:uI5cgKXNもっとやりやすい方法があるでしょうか。
0548デフォルトの名無しさん
2015/02/26(木) 04:05:32.06ID:ldMRR6U8勉強用には良いと思うよ
0549デフォルトの名無しさん
2015/02/26(木) 10:29:31.50ID:a3HLvh43JavaScriptでシコシコ作ってろ
0550デフォルトの名無しさん
2015/02/26(木) 10:59:24.21ID:TYC1vclcVBAをしばらくやった後に、
VisualBasicも覚えればよい
0551デフォルトの名無しさん
2015/02/26(木) 12:22:28.06ID:bM4XiFmY適してないわけじゃないし勉強用にはちょうどいい題材
0552デフォルトの名無しさん
2015/02/26(木) 12:35:21.12ID:yn8thPkpやりやすい方法はって、何をやりたいの?
VBAの勉強としては良いんじゃね
実用品(クイズ)として考えるなら、横に答え見えるクイズとかどうよとかなんとか
>>550
今のVB.NET覚える気なら、VBAからじゃなくて直接覚えた方が良い
そして今からVB.NET覚えるならC#覚えた方が良い
今時のプログラミング学ぶのにVBAは向かない
0553デフォルトの名無しさん
2015/02/26(木) 12:36:39.60ID:c8SpDIVpまさかワークシート関数だけで出会い系アプリ出来るのか?
0554デフォルトの名無しさん
2015/02/26(木) 14:06:09.87ID:x3jJQdhg今はこれが一番面白いと思う。Windows縛りもないし。
0555デフォルトの名無しさん
2015/02/26(木) 14:57:42.63ID:Tj00qsvp興味が広がって考えればいいと思う。
0556デフォルトの名無しさん
2015/02/26(木) 17:43:34.91ID:EsooSxVFVSの素晴らしさが分かる
次期officeのIDE強化頼む
0557デフォルトの名無しさん
2015/02/26(木) 20:58:41.04ID:ldMRR6U8面白そうだから考えてみたが俺にはVBAなし無理
>>547
VBA無しじゃ出来なかったので少しだけVBAのヤツ
一応動作するけど悪い見本です
http://fast-uploader.com/file/6980506926548/
PW shikoku (Excel97以降で動作します)
0558デフォルトの名無しさん
2015/02/26(木) 23:17:54.66ID:qrq95qPMActiveXコントロールのボタンを配置してボタンを押した時に
ボタンの真下にあるセルを参照することってできませんか?
セルを決め打ちして処理するのではなくてボタンを移動して押したらその真下のセルの数値をとりたいのですが
やり方どころかできるのかどうかさえわかりません
よろしくお願いします
0559デフォルトの名無しさん
2015/02/26(木) 23:57:49.37ID:s+XXacNk可能
ボタンのプロパティに TopLeftCell と BottomRightCell がある
0560デフォルトの名無しさん
2015/02/27(金) 03:27:27.90ID:U3hidJr11行マクロwww
面白いがVBAで全てやった方が簡単だ
>>558
出来ない
0561531
2015/02/27(金) 12:58:44.87ID:AIRVu99m557さん。もしよかったら以下に説明するプログラムを作っていただきただけないでしょうか。
作っていただいたらアマゾンギフト券1万円差し上げます。
ギフトコードを送るために捨てメアドを用意して頂きたいです。
>>531で説明した市町村の都道府県当てクイズの選択を大きくしたものです。
http://fast-uploader.com/file/6980561621150/
↑画像
http://fast-uploader.com/file/6980561888004/
↑画像を作る為にエクセルで作成したひな形 パスワード 531
ひな形をそのまま使っていただいてもいいですし、似た感じで作っていただいても大丈夫です。
A〜ANボタンが都道府県に該当。ワークシートのa1〜an20が市町村に該当します。
A県に該当する市町村がa1〜a20です
県と市はわかりやすくするための例えで使いました。赤いもの青いものとかでもよかったわけです。
市町村にあたるa1〜ax20をランダムに表示させて、
表示されたものがn12だったらコマンドボタンのNを押せば正解。ほかのボタンを押したら不正解。
ワークシートのa1〜an20とボタンの名前「A〜AN」を自分で書き換えればクイズゲームとして機能するようなものを作ってほしいのです。
もし気が向いた方いたらよろしくお願いします。
http://fast-uploader.com/
アプロダです
[email protected]
このメールアドレスからお礼を送ります。
0562デフォルトの名無しさん
2015/02/27(金) 19:51:35.21ID:qn0yExqXExcel2013
初めてVBAでプログラムを作っております。
現在Excelマクロで、実行するとIEで指定のページを開いて、そこにあるプルダウンメニューの中で
セルの値に等しいものを自動的に選択・・・というものを作っております。
ページを開くところまでは行けたのですが、何度やってもプルダウンメニューの選択ができません。
エラーとしては「このプロパティまたはメソッドをサポートしていません」と言われるのですが、これについて調べてみたら、
根本的に式が間違っている可能性とも・・・。
なお、選択しようとしているコードは
objIE.Document.getElementByname("ソース表示した時のSELECT NAME名").Selectedtext = Range("A1") ※仮にセルA1とします
どこか間違っていますでしょうか。
0563デフォルトの名無しさん
2015/02/27(金) 20:06:22.87ID:if/y8obXJavaScriptと同じようなコードで良いんじゃないの?
getElementBynameもSelectedtextも見たことないな。
0564デフォルトの名無しさん
2015/02/27(金) 20:11:44.22ID:qn0yExqXお返事ありがとうございます。
いかんせん、色々なインターネットサイトを見ながら作成しているもので、
変なコードが混ざっているかもしれません。
0565デフォルトの名無しさん
2015/02/27(金) 20:21:07.16ID:vnP6fImOrange("a1").value = lval
0566デフォルトの名無しさん
2015/02/27(金) 22:53:25.01ID:6q9/K/Gu色々間違ってるね
×getElementByName・・・・・○getElementsByName
セルの値に等しいものが なかったらどうしたいのか知らないけれど
こうかな
ObjIE.document.getElementsByName("NAME名")(0).Value = Range("A1").Value
0567デフォルトの名無しさん
2015/02/27(金) 23:01:51.39ID:wYZHWCrR0568デフォルトの名無しさん
2015/02/27(金) 23:52:41.29ID:hF32CD2u参照設定してる?
0569デフォルトの名無しさん
2015/02/28(土) 10:10:29.69ID:O+M1UhJt画像みたけどボタンが40個しかないじゃん
47個以上ないと全都道府県が選択肢に表示出来ないよね?
てか、そもそも47択とか40択とか、もうギャグとしか思えない。
普通はせいぜい4択とか5択ぐらいに留めておくモンだよ。
まぁ、地方ごとの括りで九州・沖縄地方で8県とか関東地方で1都6県とか
それに山梨加えて首都圏1都7県みたいな区分法があるから、
8択もしくは切り良く10択ぐらいまでは対応しててもいいとは思う。
ちょっと凝った作りにするなら
設問ごとに配点を変えて選択肢が多い問題は配点高め、少なければ低め、という具合にしたり
某クイズ番組みたいに、難しいと思ったら[50:50]ボタンを押すと回答の選択肢を減らせる(ただし、得点が下がる)
とかの機能も付け加えると学習ソフトとしては子供の食いつきも良くなると思う。
それから、回答する画面に出題内容のデータが見えてるってのも頂けない。
例えば、「高知市と同じ列にある市町村は全部高知県だ」っていうように
見えてるデータの並びから問題の答えが類推できちゃう。
これは設問データの登録画面と回答時の画面を別シートにすれば良いだけなんで
たいした問題じゃないけど。
0570デフォルトの名無しさん
2015/02/28(土) 10:51:46.31ID:mh+ByRRh0571デフォルトの名無しさん
2015/02/28(土) 11:08:33.18ID:52f9dl67557だけど
エクセルのワークシート関数は判るんでしょ?
うpした四国のシート保護を解除し15行〜20行を再表示すれば作業行の関数が見える
それを参考にすれば自分で拡張出来ると思います
0572531
2015/02/28(土) 11:28:27.65ID:FY4lD6Niこれは都道府県を覚えるためではなくて仕事の能率を上げるためにタナの位置を覚えるためのものなんです。
40個のボタンは仕事場にあるタナです。タナの位置とそこに入る物の位置を暗記するとすごく仕事が速くなるんです。
仕事は数年では早くなるみたいなのですが、このプログラムがあれば短期間で熟練者と同じスピードになると思ったんです。
どなたか作っていただけないでしょうか。アマゾンギフト2万円分差し上げます。
作ってもいいという方いらっしゃいましたら、日をまたぐようならトリップを付けてください。
>設問データの登録画面と回答時の画面を別シートにすれば良い
画面を下にスクロールさせて設問データを見えないようにしてしまおうと思ってました。
でも別シートにできるのであればそちらの方がいいです。
凝ったつくりにする必要はありませんが、あえて贅沢を言うなら不正解を出したときに
不正解(正解はN)と付けることができればいいと思います。無理なら大丈夫です。
0573デフォルトの名無しさん
2015/02/28(土) 11:34:52.26ID:52f9dl67作るよ
0574531
2015/02/28(土) 11:37:53.36ID:FY4lD6Niよろしくお願いします!
捨てメアドを用意してください。
明日になるようであればトリップを付けてください。
どうぞよろしくお願いします。
0575デフォルトの名無しさん
2015/02/28(土) 11:40:39.61ID:52f9dl67[email protected]
こちらに連絡下さい
0576デフォルトの名無しさん
2015/02/28(土) 11:43:43.88ID:zpiGIFyp0577デフォルトの名無しさん
2015/02/28(土) 12:00:12.18ID:L5LuAS7l0578デフォルトの名無しさん
2015/02/28(土) 12:25:12.68ID:BkRuYz430579デフォルトの名無しさん
2015/02/28(土) 13:30:06.52ID:WpflD63yおかしいなと思っていたら、クリックする処理の後にIEのアドレスを見てみたら最後に # が付いてた。
https://www.○○○.jp/#みたいな感じに。
普通に手動でクリックしたらページ移行するんだけど、これの原因って分かります?
クリックのコマンドは
For Each objLink In objIE.document.Links
If InStr(objLink.outerHTML, "ログイン") > 0 Then
objLink.Click
Exit For
End If
Next
OSは7、excelは2010です。
0580デフォルトの名無しさん
2015/02/28(土) 14:21:15.01ID:WpflD63y0581デフォルトの名無しさん
2015/02/28(土) 14:23:12.94ID:WpflD63yソース内に a href="#" OnClick=
とあるので、これが原因ですか。
0582デフォルトの名無しさん
2015/02/28(土) 20:05:31.52ID:daVTIXn7ポップアップブロックを無効にしたらうまくいきました。
0583デフォルトの名無しさん
2015/02/28(土) 23:51:49.81ID:D9zZ2LY4どれにどのキーを割り当てたのか忘れてしまった場合一覧表示するような方法はないのでしょうか?
ショートカットキーを割り当ててないプロシージャも多く存在し探すのが困難な状態です。
0584デフォルトの名無しさん
2015/03/01(日) 02:52:39.18ID:cyp+wkSl金はいらんけどココに貼ろうかなマクロ
0585デフォルトの名無しさん
2015/03/01(日) 02:54:41.44ID:cyp+wkSlデザインモード
プロパティ
でボタン1つ1つ見ていくしかない
activexのボタンなら
ckickイベントのプロシージャ名になってるから
区別しやすいけども
0586デフォルトの名無しさん
2015/03/01(日) 02:55:24.51ID:cyp+wkSl解りません
0587デフォルトの名無しさん
2015/03/01(日) 03:09:06.39ID:psXy7Mpk既に設定済みのものを一覧で取得する方法は分らんが
今後ショートカットキーを設定する分に限れば
マクロのコード内でショートカットキーを設定する方法を用いることで
それをショートカットキー設定の一覧表のように運用できる。
やり方はこの辺参照
http://www.moug.net/tech/exvba/0150112.html
今までの分はマクロオプションのダイアログボックスで
一個ずつ地道にチェックしてくれ。
0588デフォルトの名無しさん
2015/03/01(日) 14:41:51.83ID:xRoa0siUショートカットへの紐づけは一応確認できるな。
0589デフォルトの名無しさん
2015/03/01(日) 16:47:27.07ID:mBjTa80/>>586
>>588
ありがとうございます。モジュールが別れている場合は一つ一つ確認するしかないようですね。
0590デフォルトの名無しさん
2015/03/01(日) 16:49:55.53ID:mBjTa80/0591デフォルトの名無しさん
2015/03/01(日) 19:47:42.95ID:psXy7Mpkコメントに書くぐらいだったら>>587のが良いじゃん
0592デフォルトの名無しさん
2015/03/02(月) 14:44:41.75ID:DriU0dF2thisworkbook.nameだとクラッシュ前のままのようなのです。
よろしくお願いします。
0593デフォルトの名無しさん
2015/03/02(月) 14:55:04.01ID:DriU0dF2ActiveWorkbook.Nameがありましたね。
ただ、これはブックの遷移によって変動するのでThisworkbooks.Nameのような静的?なプロパティはないでしょうか?
0594デフォルトの名無しさん
2015/03/03(火) 07:28:16.96ID:eHtnEkEe勝手に広がって積み上げ棒グラフが増えていくようにしたいです。
VBAで可能でしょうか?
0595デフォルトの名無しさん
2015/03/03(火) 11:23:04.58ID:Su0lRAUl能力のある人がVBA使えば可能です
俺には出来ないけど
0596デフォルトの名無しさん
2015/03/03(火) 13:57:43.83ID:dNmnY3TbGoogleスプレッドシートなら簡単ですよ
0597デフォルトの名無しさん
2015/03/03(火) 17:21:59.69ID:pevxvD4RGoogleスプレッドシートはA2:Nなんて具合の範囲指定ができます。スクリプトなしで作れますお
0598デフォルトの名無しさん
2015/03/03(火) 21:47:05.98ID:11GO0ZYWでける。
0599デフォルトの名無しさん
2015/03/03(火) 22:42:59.49ID:wgn1BS+i0600デフォルトの名無しさん
2015/03/03(火) 23:24:41.97ID:X7j82Fgoでぐぐればいろいろ出てくるけどそういう事じゃないのかい?
0601デフォルトの名無しさん
2015/03/04(水) 11:30:15.03ID:dDcQZ4yU0602デフォルトの名無しさん
2015/03/04(水) 17:41:05.26ID:VeSQgKXpどのあたりが違うの??
0603デフォルトの名無しさん
2015/03/04(水) 23:53:19.75ID:pCKZSdcyそりゃあもう、変数にカーソル当てれば型が表示されるし、クラスやメソッド、プロパティなんか入力候補出まくりだし、
打ち間違えても執拗にエラーメッセージポップアップすることないし、修正候補も出るし。
0604デフォルトの名無しさん
2015/03/05(木) 00:01:03.17ID:mXnwYOHg移動出来ないんじゃなかったっけ?
VSはそれが出来る。
0605デフォルトの名無しさん
2015/03/05(木) 00:28:47.23ID:5Zc9dVue0606デフォルトの名無しさん
2015/03/05(木) 08:17:11.55ID:ookD3nmq次期OfficeのIDE強化ってww
むしろ、VBAなんてなくす方向性なんだが?馬鹿なのおまえ?
0607デフォルトの名無しさん
2015/03/05(木) 08:38:59.79ID:Z+dMZ8cDそうなの?無くして代替は何になるの?
0608デフォルトの名無しさん
2015/03/05(木) 08:53:30.38ID:ookD3nmq代替なんてない。廃止。
office onlineで既にもう初めからその手のスクリプトを載せずに、外部からのREST
API(sharepoint)叩けってことで、済ましてる。でもそれはVBAとは全く異なるもの。
クライアントサイドでプログラム組みたけれVS2013Community使えって方針。
さらにAccessも次で廃止されると言われてる。ま、今のMSの状況みりゃ、クライアント
サイド強化なんて方針と真逆だからな。
0609デフォルトの名無しさん
2015/03/05(木) 10:29:05.10ID:RO7xYmyNとりあえず廃止ってのはっきりソース出せ
0610デフォルトの名無しさん
2015/03/05(木) 10:57:32.41ID:ookD3nmq命令口調で偉そうだなおまえw
0611デフォルトの名無しさん
2015/03/05(木) 12:30:12.87ID:CjMOKIcO0612560
2015/03/05(木) 12:56:01.40ID:7tJox84e0613デフォルトの名無しさん
2015/03/05(木) 13:53:35.42ID:5zx38OHwへー
0614デフォルトの名無しさん
2015/03/05(木) 14:19:17.69ID:n243tM8K> office onlineで既にもう初めからその手のスクリプトを載せずに、外部からのREST
> API(sharepoint)叩けってことで、済ましてる。でもそれはVBAとは全く異なるもの。
オーバーヘッドでかすぎで、使い物にならんよ。
0615デフォルトの名無しさん
2015/03/05(木) 14:41:51.16ID:UlcZ3yHx今以上にGoogleとか互換ソフトに流れるでしょ
俺はむしろVBA以外の言語も使えるようにしてほしいな
c#のコンパイラがオープンソースになったと聞いたし
自社製品なんだから組み込んでほしいわ、Scriptとして
0616デフォルトの名無しさん
2015/03/05(木) 15:18:58.12ID:kngTpWoBSQLServerにVBAが搭載されるのか?
0617デフォルトの名無しさん
2015/03/05(木) 19:06:43.36ID:vrsjH0xcたのしいお^−^
0618デフォルトの名無しさん
2015/03/06(金) 02:16:07.99ID:Af9vQGkK俺は>>603だけど、>>556じゃないよ。
VSとVBAのIDEがどの辺りが違うのか>>602が聞いたから答えただけ。
それでいきなりバカ扱いとかどんだけ短絡思考なのかとは思うけど、
VSとの統合化はそれはその方面で進んで行くとして、
今までのような形態が無くなるとは思えないな。
Excel単体で色々出来るから間口も広いし重宝するんであって、
一々外部から命令与えないと処理出来ないのはシステムに組み込まれていることが前提になってる。
やっぱりみんなの言う通り、どこから廃止と言う話が湧いて来たのかソース晒せよと。
0619デフォルトの名無しさん
2015/03/06(金) 02:57:20.31ID:Eaa00tz+そりゃ最新機能は使いたいけど、MSがそれやっちゃうとたぶんVSと同じようになっちゃう
VB6風のまま進化してくれるなら大歓迎だけど・・・
0620デフォルトの名無しさん
2015/03/06(金) 03:49:08.11ID:dy/VxtajむしろJavaやjavascriptやCとか、PHP、Rubyなどとあまりに違いすぎて
難しいかもしれない
その上エディタは信じられないくらい低機能かつおかしなデフォルト設定で、
作ってる側のマイクロソフトは
自分で作ってるこのエディタを、自分で使ったことすらないんだろう
このままだとGoogleのAppScriptに人気が移ってしまうかもしれないな
0621デフォルトの名無しさん
2015/03/06(金) 07:48:03.54ID:S8ZVyGJZ初級と上級の情報はあっても中間がなかなか見つけられない
0622デフォルトの名無しさん
2015/03/06(金) 11:19:49.16ID:YGwFHVd8VBAは言語として相当時代遅れだし発展性もないし他と比べて学習コストも高い
0623デフォルトの名無しさん
2015/03/06(金) 11:41:49.74ID:zXU87W6+十年後も同じだと思う
0624デフォルトの名無しさん
2015/03/06(金) 11:42:29.60ID:Af9vQGkK0625デフォルトの名無しさん
2015/03/06(金) 12:00:42.97ID:oKSD57uY0626デフォルトの名無しさん
2015/03/06(金) 12:01:34.34ID:EZssHJqp彼らにとってはVBAはとても開発効率の良いツールになっていて、枯れてるんだからもう変えないでくれと思っている。
目的に応じて他の言語やツールを使っているのならまことにもっともな要望と言えよう。
0627デフォルトの名無しさん
2015/03/06(金) 12:15:26.90ID:05NuRrrk0628デフォルトの名無しさん
2015/03/06(金) 12:23:13.72ID:EZssHJqpそれも正しい見解
0629デフォルトの名無しさん
2015/03/06(金) 12:27:35.04ID:QQczZemzVBAは資産として残して
別言語も追加すればいいんじゃないの
.NETからだと解放の手間とか色々とVBAユーザーから見たら手間かかる
0630デフォルトの名無しさん
2015/03/06(金) 13:30:13.96ID:+sWdgm4H0631デフォルトの名無しさん
2015/03/06(金) 13:37:44.62ID:zXU87W6+追加なら良いね
マクロシートは十年後に廃止で良い
0632デフォルトの名無しさん
2015/03/06(金) 13:56:50.38ID:FLRSRQ+G0633デフォルトの名無しさん
2015/03/06(金) 14:00:18.85ID:NM2JJvR7やってくれません。
0634デフォルトの名無しさん
2015/03/06(金) 14:07:18.82ID:NM2JJvR7詳しくは、ここ参照。
『[C#] COM と RCW と参照カウント』
http://igeta.cocolog-nifty.com/blog/2007/07/rcw.html
0635デフォルトの名無しさん
2015/03/06(金) 17:43:38.28ID:syMrohC1EXCELって管理外だからね
0636デフォルトの名無しさん
2015/03/06(金) 20:41:55.68ID:ci1Iacgwhttps://support.microsoft.com/kb/279721/ja?wa=wsignin1.0
実行中のEXCEL2010に対して、DDEでセルに値を書き込むような
簡単なプログラムをC++で作ってみたのですが、10回中5回くらいは
成功し、残り5回くらいは失敗します。失敗の場合でもコマンドの実行
結果は正常ですが、書き込めません。DDEってこんなに不安定な機能
なのでしょうか?
0637デフォルトの名無しさん
2015/03/06(金) 20:56:08.83ID:2n7TyHez0638デフォルトの名無しさん
2015/03/06(金) 21:26:45.01ID:IUqp5Z1FDDEはWin16時代の遺物みたいなものだから。
0639デフォルトの名無しさん
2015/03/06(金) 21:35:54.72ID:ci1IacgwではEXCELに確実に他のプログラムからデータやコマンドを送信
するにはどういう方法がお勧めですか?
0640デフォルトの名無しさん
2015/03/06(金) 21:48:30.44ID:IUqp5Z1Fオートメーション。
VBScriptでExcelシートを弄る時とかに使ってるやつが、正にそれ。
0641デフォルトの名無しさん
2015/03/06(金) 22:23:16.84ID:ci1Iacgwオートメーションでも非同期操作出来る?
0642デフォルトの名無しさん
2015/03/07(土) 07:45:28.31ID:M/xZU2Nr昔やった時は通信確立からのプロトコルで組み上げてたわ
そこまでやると安定する
0643デフォルトの名無しさん
2015/03/07(土) 08:08:10.53ID:axQ1bDXB>通信確立からのプロトコル
って、どういう事ですか?もう少し解説お願いします。
0644デフォルトの名無しさん
2015/03/07(土) 10:22:13.70ID:6R+vjf4I0645デフォルトの名無しさん
2015/03/07(土) 20:21:45.36ID:8+lmC0CM0646デフォルトの名無しさん
2015/03/07(土) 20:51:13.82ID:rhnGZpnTVBAで使う時の質問じゃなければ
こっちで↓
Excel総合相談所 117 [転載禁止]©2ch.net
http://peace.2ch.net/test/read.cgi/bsoft/1423908437/l50
0647デフォルトの名無しさん
2015/03/07(土) 21:12:46.39ID:wvhHyM89いいんじゃない?
どうせスレ違いだらけだし
0648デフォルトの名無しさん
2015/03/07(土) 21:36:21.22ID:raieV8v8開いているブックが新しく名前をつけたブックに置き換わってしまいますが
開いているブックはそのままで、別名のバックアップファイルのみを画面上では一切挙動せずに作成させる事はできないのでしょうか?
0649デフォルトの名無しさん
2015/03/07(土) 21:54:50.26ID:QT74R4Ra保存してコピーしたらいいんじゃないの?
0650デフォルトの名無しさん
2015/03/07(土) 21:56:02.72ID:yEeTgVhPコピーして保存したらいいんじゃないの?
0651デフォルトの名無しさん
2015/03/07(土) 21:59:41.66ID:cLUisOVsテンプレートファイル使えばいいんじゃないの?
0652デフォルトの名無しさん
2015/03/07(土) 22:12:21.24ID:raieV8v8>>650
>>651
ありがとうございます。
セルの数値を抽出してファイ無名の末尾に追加したいのですが (例として時刻とか)
保存してコピーしてリネームですね、単純なコードかもしれまでんが初心者なのでバグなくちゃんと動くかどうかの動作検証が大変そう!!
まあしょうがないか。。
0653デフォルトの名無しさん
2015/03/07(土) 22:56:30.68ID:QT74R4Raだいじょうぶだよ
俺は検証が大変になるほどのテストケースを思いつけないからもっと初心者だ
0654デフォルトの名無しさん
2015/03/07(土) 23:18:13.49ID:d3CzPbM9ThisWorkbook.SaveCopyAs
でいいんじゃね?
0655デフォルトの名無しさん
2015/03/08(日) 00:47:33.05ID:OitgB2a20656デフォルトの名無しさん
2015/03/08(日) 00:52:12.11ID:7lK0xe8v0657デフォルトの名無しさん
2015/03/08(日) 00:57:10.10ID:Cw35OWdT超簡単に問題解決できました。ありがとうございました。
0658デフォルトの名無しさん
2015/03/08(日) 02:27:21.28ID:fWJ6KrFiファイルのコピーが不成立だった場合
同名のファイルが存在した場合
ファイルが存在しなかった場合
指定した領域へアクセスができない場合
etc
あなたならどうしますか?
0659デフォルトの名無しさん
2015/03/08(日) 14:19:21.04ID:i6ndjJITそれ全部
> ファイルのコピーが不成立だった場合
やんけ
0660デフォルトの名無しさん
2015/03/08(日) 14:30:59.15ID:IpEma7q1仕事ほっぽり出して寝る
0661デフォルトの名無しさん
2015/03/09(月) 11:31:34.41ID:br0W6doH1枚目は1で10枚目は10にしたいです
0662デフォルトの名無しさん
2015/03/09(月) 11:55:58.91ID:JeUKKiycつ Workbook_BeforePrint(Cancel As Boolean)
これを使ってA1に数字を入れたら?
0663デフォルトの名無しさん
2015/03/09(月) 12:41:58.53ID:Y+wv5reb実際には既に組んであるマクロに組み込むつもりで
他のセルから参照したりするので
印刷する部数毎にA1にプラス1する という最小限のコードを知りたかったのです
言葉足らずですみません
0664デフォルトの名無しさん
2015/03/09(月) 13:46:31.78ID:b0X+6jZ8VBAの画面でプロパティで設定しますけれど、そういう方法ではなくて、
何かプログラム的な方法で設定できますか?
0665デフォルトの名無しさん
2015/03/09(月) 19:59:21.82ID:nxAcVNnzThisWorkbook.Password = hoge
という事では無くて?
0666デフォルトの名無しさん
2015/03/09(月) 20:13:38.37ID:YIVcJxyOZIPファイルに圧縮w
0667デフォルトの名無しさん
2015/03/09(月) 20:24:33.59ID:b0X+6jZ8ブックにパスワード設定ではなくて、VBAの画面で
VBAProject - プロジェクトプロパティ
表示して、[保護]タブをクリックして
パスワード ********
パスワード確認入力 ********
って入れるとパスワード設定できますよね。
この操作を、こういう手作業でやるんではなくて、そのxlsmファイルがWindowsのどこかのフォルダに保管して
あるとして、そのxlsmファイルを何らかのプログラムか何かの方法で、パスワード設定出来ないかなという
質問です。そんな事は無理かな。
0668デフォルトの名無しさん
2015/03/09(月) 20:33:26.16ID:nxAcVNnzVBAProject パスワード 設定 で調べたら、
「出来ない事はないけどウィルスプログラムみたいなものなのでアンチウィルスソフトに引っかかるかもね」という回答を見つけたが。
0669560
2015/03/09(月) 21:01:35.47ID:R+XoG9o+http://officetanaka.net/excel/vba/sheet/sheet07.htm
0670デフォルトの名無しさん
2015/03/09(月) 21:04:53.18ID:R+XoG9o+>>667 > ブックにパスワード設定ではなくて
を見てなかったわ
>>669 は忘れてくれ
0671デフォルトの名無しさん
2015/03/09(月) 21:53:01.84ID:7i5N+fBw例えば、
1:あいうえを
2:かきくけこ
3:さしすてそ
4:
とあって、4行目にたちつてとと入力するようなマクロを組みたい場合に
使えるようなマクロなのですが・・・
0672デフォルトの名無しさん
2015/03/09(月) 22:12:11.05ID:YIVcJxyOあるよ!
1行目から下に空白セルを探したり
最終行から上にデータあるセルをさがして+1したり
0673デフォルトの名無しさん
2015/03/09(月) 23:02:07.53ID:7i5N+fBwありがとうございます
できれば教えて欲しいのですが・・・
0674デフォルトの名無しさん
2015/03/09(月) 23:25:01.72ID:YIVcJxyO>>1より抜粋
★5 レベルはどうあれ、ここはプログラマ用の板スレです。プログラマとは、自分でプログラムを組み、
コードを書く人の事なので、自分でやるきは全く無く、丸投げしようって人はお断りです。
ヒントを貰えばあとは自力でなんとかしますって人のみどうぞ。
★6 わからなければとりあえず「マクロの記録」(Alt, T, M, R)
0675デフォルトの名無しさん
2015/03/09(月) 23:51:28.94ID:7i5N+fBwいずれにせよここでは解答が得られないのはよく分かりました。
スレ汚し申し訳ありませんでした。
0676デフォルトの名無しさん
2015/03/10(火) 00:54:03.77ID:iHRWoavL次の方どうぞー
0677デフォルトの名無しさん
2015/03/10(火) 03:44:57.92ID:jIX0x7uHvba 最終行でググれば出てくるよ。
0678デフォルトの名無しさん
2015/03/10(火) 20:07:26.42ID:2lxItQGz1.RangeオブジェクトやCellsにはEnd()プロパティというのがあってCtrl+矢印を押した時と同じ働きをする。
2.Rows.CountとColumns.Countはそれぞれ指定された範囲内の行列最大値を返す。
3.Offsetは任意のセルからの相対的な位置を返す。
4.WorksheetオブジェクトにはUsedRangeというオブジェクトがあって現在、データの入っている領域を矩形範囲で返す。
5.Worksheet.Cellsは一つのワークシートが使用できる全ての行列を表す。
0679デフォルトの名無しさん
2015/03/11(水) 00:23:55.81ID:eJ0rWRB50680デフォルトの名無しさん
2015/03/11(水) 01:03:48.05ID:0W10G8DZ・2003…65,536行×256列
・2007…1,048,576行×16,384列
・2010…1,048,576行×16,384列
全セルに10桁程度の数を入力して埋めていった場合
実用範囲は何シートぐらいまででしょうか?
0681デフォルトの名無しさん
2015/03/11(水) 01:59:25.09ID:eJ0rWRB5何に使うんだ?
単純に冷やかしているようにしか見えないんだが。
0682デフォルトの名無しさん
2015/03/11(水) 02:18:06.22ID:0W10G8DZとあるビックデータ解析です。
VBA以外は詳しくないので
すべてExcelで処理してみようかとあれこれ試行錯誤中です
最近1GBほどの容量のブックファイルがやや重いながらも
動作には問題無く動く事を知りました。
0683デフォルトの名無しさん
2015/03/11(水) 02:28:45.90ID:Y69XOrvEVBAに無関係でしょ
0684デフォルトの名無しさん
2015/03/11(水) 02:37:37.26ID:0W10G8DZ自分でも調べますが
この手の事に詳しい人がいたら聞いた方が確実に早いかと
あとVBA処理することを前提に考えてますのでここで質問しました
0685デフォルトの名無しさん
2015/03/11(水) 02:48:15.49ID:0W10G8DZ>>680
ちょっと試して見た。
Excel2003で
1シート
・2003…65,536行×256列
を数字で埋めた場合約250メガバイトほどのファイルサイズになるようで
1GBを実用範囲とすると4〜5シートまで使用可能?
シートを開いたり保存したりするのには時間がかかるが
そのデータを元に集計を行うVBAが極端に遅くなく動けば実用範囲です。
0686デフォルトの名無しさん
2015/03/11(水) 04:12:40.27ID:6SLte7oT0687デフォルトの名無しさん
2015/03/11(水) 05:57:52.20ID:/+JGHz5q"TEST"の四文字を一行16,384セルに詰めて64KB、コピーしまくったら250,000行で止まって15GB強。
セルのデータだけでメモリーいっぱいまで使えてしまうから「必要環境」はデータ領域+マクロの変数領域って考えりゃいいのかな。
それと気になったのは、ひらがなを256文字入れて一行分コピーしてみたんだけど、
計算上は8MB行くはずなのに2.7MBくらいしかいかなかったんだけど、どういう容量の取り方になってんだろ。
0688デフォルトの名無しさん
2015/03/11(水) 07:18:06.75ID:Te5AMx4ZVBA以外は詳しくないってんならこの機会に覚えれば良いだろ。後、統計解析ならR
0689デフォルトの名無しさん
2015/03/11(水) 07:19:04.52ID:mbZuxei00690デフォルトの名無しさん
2015/03/11(水) 17:13:06.87ID:HQzc8cpYうむ
0691デフォルトの名無しさん
2015/03/11(水) 17:38:51.43ID:ZMdmfMKqどういうことだ?
0692デフォルトの名無しさん
2015/03/11(水) 18:02:06.25ID:pAchRHiO0693デフォルトの名無しさん
2015/03/11(水) 18:45:05.93ID:8Wvfa6i60694デフォルトの名無しさん
2015/03/11(水) 20:10:19.19ID:/+JGHz5q大きな会社(特に昔からある会社)ほど自由にソフト触れないんだよ。
既存のソフトで代替出来る限りは「こういう便利なのがあるんですけど」って言っても要求通らないし。
0695デフォルトの名無しさん
2015/03/11(水) 20:14:05.56ID:lYcCfnhhブック・オープン -> シート上のデータ読み込み -> ブック・クローズ -> 最初に戻る
していけばいい。I/Oのオーバーヘッドは加わるけど、メモリ・リソースの限度はなんとかなるだろう。
0696デフォルトの名無しさん
2015/03/11(水) 23:55:33.99ID:i5IX39mpビッグデータ言いたいだけちゃうんか
0697デフォルトの名無しさん
2015/03/12(木) 00:04:11.00ID:kI3K8SOYビッグデータはお前を裏切らない。
0698デフォルトの名無しさん
2015/03/12(木) 00:19:12.57ID:lHipq8Miすごく・・・ビッグデータです・・・(ぽっ
0699デフォルトの名無しさん
2015/03/12(木) 00:21:50.08ID:sDEFzeK30700デフォルトの名無しさん
2015/03/12(木) 00:23:26.70ID:RhmAAC27それを1000ファイル作って1テラなら確実にビックデータだろう
VBAならそれを生成することも解析することも適切にやればさほど難しい事ではない
つまり工夫すればVBAでビックデータ解析は可能に違いないと見ている。まだやったことないけど。
0701デフォルトの名無しさん
2015/03/12(木) 00:36:47.34ID:RhmAAC271ギガ これは古い本で読んだ情報だけどググったら今は全然違ってるみたい
http://ja.wikipedia.org/wiki/%E3%83%93%E3%83%83%E3%82%B0%E3%83%87%E3%83%BC%E3%82%BF
>2012年現在数十テラバイトから数ペタバイトの範囲である。
10テラ分割すれば出来なくはないだろうけどExcelだけだとしんどいだろうね。
ペタはさすがに無理かな。
0702デフォルトの名無しさん
2015/03/12(木) 00:40:46.61ID:RhmAAC270703デフォルトの名無しさん
2015/03/12(木) 00:48:51.52ID:lHipq8Mi0704デフォルトの名無しさん
2015/03/12(木) 05:05:50.73ID:Grza6kM6あるのは知ってるが実際に動いてるのものはしらないがw
0705デフォルトの名無しさん
2015/03/12(木) 09:42:18.78ID:ilfcLh2n集計とかやると、フルに使うまでもなく速度的に1シートも無理
0706デフォルトの名無しさん
2015/03/12(木) 15:21:44.53ID:lKLpS/FL0707デフォルトの名無しさん
2015/03/12(木) 15:36:32.45ID:FCsQ0GgG普通のMsgBox()なら、コピーできるよ。
コピペすると、こんな文字列になってる。
---------------------------
Microsoft Excel
---------------------------
abcde
---------------------------
OK
---------------------------
0708デフォルトの名無しさん
2015/03/12(木) 23:35:31.11ID:sDEFzeK30709デフォルトの名無しさん
2015/03/12(木) 23:50:08.33ID:lTudpg1Y0710デフォルトの名無しさん
2015/03/13(金) 00:13:10.12ID:FCcf3p6z別のワークシートだとアクティヴのワークブックはcsvになってしまいます。
別のワークブックを作成し、CSV保存し、ワークブックを閉じるのがよさそうですね
0711デフォルトの名無しさん
2015/03/13(金) 02:59:56.91ID:8nJWpwmCcsv閉じるのもいいけど元ファイルを開いたままにしたいなら、
ブックをオブジェクトに保存
csvにしたいシートを新規ブックにコピー
新規ブックをcsvで保存
元ファイルを最初に保存しといたオブジェクトでactivate
0712デフォルトの名無しさん
2015/03/13(金) 06:01:55.13ID:z8zfhg7x0713デフォルトの名無しさん
2015/03/13(金) 07:16:47.77ID:Fstr6ZGS0714デフォルトの名無しさん
2015/03/13(金) 08:10:07.94ID:aid4kS/u0715デフォルトの名無しさん
2015/03/13(金) 12:25:47.41ID:8nJWpwmC0717デフォルトの名無しさん
2015/03/14(土) 09:38:49.78ID:rFJ2VspZエクセルで作業標準書を作って作業してもらっているのですが、
そこに作業時間を表示したいのですが、作業から離れるときに
ポーズ機能をつけたり、終わるときに別のシートに時間を書き込みに行くことは
可能でしょうか?
0718デフォルトの名無しさん
2015/03/14(土) 10:48:54.96ID:6UgO5ZeW作業開始、離席、再開、終了時になんかクリックとかしてもらえるなら可能
0719デフォルトの名無しさん
2015/03/14(土) 13:18:26.47ID:rFJ2VspZ各プログラムマクロを各ボタンにつければいけますか?
0720デフォルトの名無しさん
2015/03/14(土) 13:39:31.91ID:sptcMfeO可能だけどそんか細かい監視は嫌われますよ?
仕事の品質チェックならもう少し従業員のことを考えてあげないとうまく行かないと思います
0721デフォルトの名無しさん
2015/03/14(土) 13:46:19.34ID:rFJ2VspZ0722デフォルトの名無しさん
2015/03/14(土) 14:12:26.09ID:VDfRGL410723デフォルトの名無しさん
2015/03/14(土) 14:45:54.25ID:6mV+XECP0724デフォルトの名無しさん
2015/03/14(土) 14:52:29.87ID:cCfCziOy結局そういうのだと信頼性に欠けるしなぁ
0725デフォルトの名無しさん
2015/03/14(土) 15:15:42.38ID:LSaN/4Jd作業前後に読み取らせる、くらいのことはやってるところが
あるかもしれない。
工数や工程進捗の把握かな。作業者と紐付けることも
やっているかもしれん。
で、>>717だが、エクセルの作業で、用足しや電話の応対、
誰かに呼ばれたりなんてこともあるかと思うが、いちいち中断の
ための作業をするのは非現実的じゃないかな。
本人に今やっている仕事にどれだけ時間を費やしているか
認識させるためなら、キッチンタイマー(カウントアップできる
ものもある)とかじゃダメ?
0726デフォルトの名無しさん
2015/03/14(土) 15:37:02.09ID:ZYVj/NvCあなたの会社の規模によるとおもう。
0727デフォルトの名無しさん
2015/03/14(土) 15:38:41.23ID:6mV+XECPうちもストップウォッチ(キッチンタイマーだけど)を持たせてるけど、間違いなく押し忘れてどっか行く
特に客が来たときは放置したままになりやすい
色々やらせるのがそもそもダメっていうのはあるけど、そこまで抜本対策をとるのは難しいだろう
パソコン操作させるのは時間のロスにもなるし、ミスの原因にもなる
フットペダルや大きいボタンなど周辺機器と連動させてはどうか
フットペダルならわりと安価でボタン割り当てもできるタイプもあるし、手を使わなくていい
ただ、その方向でがんばりすぎてトイレ標準時とか作り始めると士気が落ちる
柔軟にやってほしい部分をやらなくなって注意すると「(言われたことは)ちゃんとやったでしょ」という態度になっていく
まぁ、タバコやトイレで体調を自己管理させるのとどっちが効率いいかは微妙なところ
ちなみにこっちは工場じゃないからね
0728デフォルトの名無しさん
2015/03/14(土) 18:35:08.33ID:rFJ2VspZまぁ勉強がてら、いろいろプログラムを組んでみます。
0729デフォルトの名無しさん
2015/03/14(土) 20:19:47.42ID:YK5dNgNX0730デフォルトの名無しさん
2015/03/15(日) 01:00:10.65ID:Oue+f2XFcolorindexを変更しまくっているため、既定値とは大きく違ってしまっています。
0731デフォルトの名無しさん
2015/03/15(日) 03:56:42.56ID:Nu00PGZtColorIndexで設定した後にColorで取り出せばいいんじゃね。
0732デフォルトの名無しさん
2015/03/15(日) 22:48:16.06ID:Oto6pkxvありがとうございます。
colorって設定ばかりだったから、読めることを思いつきませんでした。
0733デフォルトの名無しさん
2015/03/16(月) 19:39:17.63ID:tk5ie8LU0734デフォルトの名無しさん
2015/03/16(月) 21:32:02.14ID:3ZODMEseその場合、文字列の中身は確定していないものとして、配列サイズは動的に変更できますか?
0735デフォルトの名無しさん
2015/03/17(火) 01:34:13.86ID:Vi/eJRXz配列に格納してくれる
str = "A,B,C"
ary = str.split(/,/)
0736デフォルトの名無しさん
2015/03/17(火) 02:35:49.91ID:/aRClwjbstr ←分割したい「,」入りの変数
dim val() as string, cnt as long
dim pos_cur as long, pos_next as long
pos_cur = 0
cnt = 0
do while true
pos_next = instr(",", str, pos_cur + 1)
if pos_next > 0 then
redim preserve val(cnt)
val(cnt) = mid(str, pos_cur + 1, pos_next - pos_cur - 1)
cnt = cnt + 1
pos_cur = pos_next
else
exit do
end if
loop
0737デフォルトの名無しさん
2015/03/17(火) 03:40:10.86ID:Z0NUyV+t実装調べるならまあそうだろうけど
ドキュメントにないプロパティとかでてもなぁ、という事もある
>>734
Split関数
0738デフォルトの名無しさん
2015/03/17(火) 17:20:47.84ID:t2kdwNkIVBAで組もうと思ったのですが、いかんせん高校の情報で習った知識しかなく、自分で組んだところ、
データ検索を押すと無限ループに陥ってしまい、うまくいきません。
初歩的な質問で申し訳ないのですがこのVBAを組む足がかりを教えていただけませんか?
0739デフォルトの名無しさん
2015/03/17(火) 18:25:04.03ID:vCwecCoLダウンロードしてみたけど、コードが無いんだが。
0740デフォルトの名無しさん
2015/03/17(火) 18:32:25.71ID:vCwecCoL全競技横に並べると便利。
そうすれば、worksheets("参考記録").rows(1).find("400mH")とかで、競技を見つけられる。
あるいは、1競技1シートにすれば、探す必要がなくなる。
0741デフォルトの名無しさん
2015/03/17(火) 18:41:56.57ID:t2kdwNkIご指摘ありがとうございます。前回作ったやつが強制終了でデータが消えてしまったようです。
740の意見を参考にしたいと思います。
Ifを使って、名前と競技結果が一致したら出力sheetに出力という関数を自前でやってみたのですが、
別々のsheetにあるものを同時に出力させる技術がなく、わけのわからないコードになってしまって、Loopした覚えがあります。
もう少しコンパクトにいける技術はあるのでしょうか?
0742デフォルトの名無しさん
2015/03/18(水) 11:21:30.00ID:OporZNyHExcel2013ってなんかエラー含みな気がするなぁ。
0743デフォルトの名無しさん
2015/03/18(水) 13:02:18.09ID:BjLPqBwu0744デフォルトの名無しさん
2015/03/18(水) 16:58:02.44ID:wrJQV04f俺だけかと思ってた
0745デフォルトの名無しさん
2015/03/18(水) 17:45:23.15ID:lQVpCBZN0746デフォルトの名無しさん
2015/03/18(水) 19:15:40.13ID:eDH0ZGAYマルチスレッドならイケるんじゃね
0747デフォルトの名無しさん
2015/03/18(水) 19:34:48.73ID:wrJQV04f0748デフォルトの名無しさん
2015/03/18(水) 23:55:16.37ID:ga8Jk3h70749デフォルトの名無しさん
2015/03/19(木) 12:35:13.54ID:7c4CnP4Hそれ知ったところでエクセルの外からは使えんと思うぞ
何がしたいねん?
0750デフォルトの名無しさん
2015/03/19(木) 15:43:57.39ID:1I3TwXi1@2次元配列(100×4のinteger型)の2番目列の最大値を出すには総当たりしかないですか?
Aa、b、cという3つの変数に一括で同じ数値を入れる方法ありますか?
よろしくお願いします。
0751デフォルトの名無しさん
2015/03/19(木) 16:28:51.44ID:VVf+EvQX1:しかない
2:ない
0752デフォルトの名無しさん
2015/03/19(木) 16:55:23.35ID:1I3TwXi1ありがとうございました
0753デフォルトの名無しさん
2015/03/19(木) 17:33:29.58ID:76Yv278k1.max関数
0754デフォルトの名無しさん
2015/03/19(木) 20:09:37.07ID:ygDVwDTUmax関数に引数を一気に入れる方法がない以上、総当たりだろ。
0755デフォルトの名無しさん
2015/03/19(木) 20:20:15.65ID:DWTmmRVlSet WS = Worksheets.add
Range(WS.Cells(1,1),WS.cells(100,4)) = 二次元配列
最大値 = Worksheetfunction.Max(WS.Range("B:B")
という事ではなくて?
0756デフォルトの名無しさん
2015/03/19(木) 20:29:32.37ID:HCELgKhO仕組みがしりたい
0758デフォルトの名無しさん
2015/03/19(木) 21:23:50.49ID:DWTmmRVl俺も今日、ちょうどそういう問題に当たってネットで調べたりしながら試行錯誤してたけど、
結局は廃棄可能なワークシートを使うのが一番簡単だという結論にたどり着いた。
エクセルVBAはそこまで親切なシステムしてない。
というかシートなら少なくとも三次元配列までは表現できるから配列内を自由に弄りたければArrayはシートで表現する方が効率的。
ちなみに「エクセルが足かせになるなら、もうVBS使っちゃえばいいんじゃね?」という方向もある。
0759デフォルトの名無しさん
2015/03/19(木) 21:34:06.05ID:B57QaUqnワークシート使うと処理速度が落ちるので避けたかったんです。
けっきょく総当たりに落ち着きました。
0760デフォルトの名無しさん
2015/03/19(木) 21:59:12.43ID:d+3glag/Dim testData As Variant
testData = ActiveSheet.Range("A1:D100")
With WorksheetFunction
Debug.Print .Max(.Index(.Transpose(testData, 2, 0)))
End With
End Sub
WorksheetFunction使いまくりで一応取得できる
.Transpose外せば行の最大値もとれるよ
0761デフォルトの名無しさん
2015/03/19(木) 22:00:24.09ID:i95v39FG0762デフォルトの名無しさん
2015/03/19(木) 22:01:31.59ID:d+3glag/閉じかっこ修正
0763デフォルトの名無しさん
2015/03/19(木) 22:01:34.03ID:gLg2znKB>Arrayはシートで表現する方が効率的。
とはどういう意味?
Arrayのままで十分効率的に扱えると思うけど。
それともループ処理が大嫌いとか?
0764デフォルトの名無しさん
2015/03/19(木) 22:52:50.19ID:DWTmmRVl「自由に弄りたいなら」という前提が何故抜けた。
一次元配列の操作で事足りる様な単純な処理ならまだしも
複数列に複数条件のフィルタかけて全ての情報を目的別に振り分けるみたいな複雑な処理の状況の場合はシートの方が効率いいんだよ。
だいたいエクセルで弄る事が前提になっている以上は配列の内容だってセルのどっかに記録されている状況の方が多いわけで、
わざわざ配列に値を入れるくらいならcopyしてシート上で扱う方が処理も速いし自由度が高い。
そりゃArrayのままで効率的に処理出来る条件下だけで語るなら「Arrayのままで十分効率がいい」んだろうけどさ。
0765デフォルトの名無しさん
2015/03/19(木) 22:58:28.78ID:gLg2znKB人それぞれとしか言いようがないわな。
0766デフォルトの名無しさん
2015/03/19(木) 23:05:34.69ID:DWTmmRVlまさか400に及ぶ要素を手書きでコードに埋め込んでいるわけでもあるまいし、
たとえば外部が吐き出したTXTを読み込んで各行をSplitで分けるくらいなら、読み込む時の設定次第でエクセルのシートとして読み込めるわけで、
「100*4の二次元配列」にする前にもっと出来る事があるような気がしてきた。
0767デフォルトの名無しさん
2015/03/19(木) 23:28:49.91ID:gLg2znKBとかかも知れんわな。
0768デフォルトの名無しさん
2015/03/20(金) 00:23:53.33ID:kFbLT/qSワークシートを使う操作はライブラリ化しにくい。
0769デフォルトの名無しさん
2015/03/20(金) 05:11:47.63ID:uvRirvlk入門書、初中級者用ではなく
クラスモジュールも駆使した上級者向けの本ってございませんか?
0770デフォルトの名無しさん
2015/03/20(金) 07:57:10.50ID:Xj3wMBJM0771デフォルトの名無しさん
2015/03/20(金) 08:03:16.34ID:uvRirvlkそうなんですよ。
Java言語や結城なんとかのデザインパターンの本は読んでますが
ExcelVBAに独特のクラス文法が違ってるから
それに特有の本が欲しいんですよ。
VBAのクラスはプロパティを定義するのに特殊なのは知ってますか?(特殊というのはJavaを標準とした勝手な考えだけど。getterやsetterを必ず書かないといけないみたいなんです。)
0772デフォルトの名無しさん
2015/03/20(金) 08:12:40.34ID:h8MQtvkP> getterやsetterを必ず書かないといけないみたいなんです。
おとなしく初心者用の本を買って読めよ
0773デフォルトの名無しさん
2015/03/20(金) 08:18:38.73ID:pLIOPcO5初心者本で見つけた小ネタ使って
これ以上処理速度上がらんだろうと思ってたコードをいじってみたら
3割ほどスピードアップしたっけな。
0774デフォルトの名無しさん
2015/03/20(金) 08:18:55.30ID:Xj3wMBJMプロパティに関しては面倒くさければメソッドと同じように作ってしまえばいい。
そんなことより継承が使えなかったりコンストラクタに引数を持たせることが出来なかったりする方がちょっと悩ましいが
それもデザインパターン知ってれば応用きかせて何とかなる範疇。
0775デフォルトの名無しさん
2015/03/20(金) 08:24:41.38ID:uvRirvlkそのとおり。
VBAでのプロパティの作り方など多言語の本には絶対載っていない。
さらにVBAは継承が使えないからもしそれを実現するにはどう書けばいいかなんてJava本には絶対に載っていない。
そういう文法的な意味でVBAの上級者向けの本を探しているのですよ。
こういうサイトを見つけました。
「昨日までJavaJavaしてた人がいきなりExcelのVBAを実装する羽目になったときのためのメモ」
http://qiita.com/opengl-8080/items/5bd8ae7fe95f5c31dfc3
逆に
「昨日までVBAVBAしてた人がいきなりクラスモジュール設定やオブジェクト指向を活用する羽目になったときのためのメモ」
みたいな本を探しているのですよ。
0776デフォルトの名無しさん
2015/03/20(金) 08:27:04.31ID:94vKR86E0777デフォルトの名無しさん
2015/03/20(金) 09:05:34.70ID:Xj3wMBJM無いだろうな。
VB6からVB.Netへ位ならあるかも知れないけど、そもそもJavaとExcelVBAは立ち位置もかなり違うものだしな。
むしろJavaが使えるならそっち側からExcelのObject操作すりゃいいんじゃないの?
0778デフォルトの名無しさん
2015/03/20(金) 09:08:06.38ID:Xj3wMBJMおいおい何を今更w
まさか殆どVB6と一緒なこと知らない訳じゃないだろ?
0779デフォルトの名無しさん
2015/03/20(金) 09:23:52.40ID:LtTIDtbq今頃何寝言言ってんのおまえ?
0780デフォルトの名無しさん
2015/03/20(金) 09:56:50.63ID:+Z7yaCvp機能追加なら使わなければいいけど、仕様変更など決して許しちゃダメだ。
0781デフォルトの名無しさん
2015/03/20(金) 10:03:08.52ID:Z8yGKqIr0782デフォルトの名無しさん
2015/03/20(金) 10:47:58.88ID:hT9HjgFmじゃあVB6の本で十分なのか
0783デフォルトの名無しさん
2015/03/20(金) 11:16:08.77ID:Z8yGKqIr古本屋やネットで探すのも至難の技だろう
0784デフォルトの名無しさん
2015/03/20(金) 11:44:56.91ID:G05napNA>>750の質問は簡略化して書いたので、実際は
2000行×4列のデータがすでにワークシートに記入されてて、
1行ずつ2000行まで最大値とかいろんな計算をしてパラメータ変えてまた1行目から、ってのを繰り返します。
Dim data as Variant
Set data = Range("A1:D2000")
で変数に入れればMaxも使えるんですがなんせパラメータが数十万通りあるので
Variantやワークシート操作してると時間かかっちゃうんです。
0785デフォルトの名無しさん
2015/03/20(金) 12:03:06.75ID:+Z7yaCvpパラメーターが数十万通り・・・
悪いこと言わないから他の言語で扱
うことをお勧めする。
データ入出力はExcelのままでいいから、SAFEARRAY構造体をC++の
dllに渡すんだ。
処理スピードだけじゃなく、汎用性も得られるし選択肢が広がる。。
0786デフォルトの名無しさん
2015/03/20(金) 12:18:14.92ID:G05napNAアドバイスありがとうございます。
やっぱVBAでは限界ですねw ほかも勉強してみます。
0787デフォルトの名無しさん
2015/03/20(金) 13:41:55.41ID:32JFZAssそういう手法を解説したお勧めの本
教えて下さい。
0788デフォルトの名無しさん
2015/03/20(金) 14:29:51.90ID:+Z7yaCvpごめん、本は知らない。
昔からある枯れた部分だからネット上に情報はたくさんあるはず。
一度出来るようになると、決まりきった実装パターンばかりなので、特に沼にはまりこむ心配はない。
0789デフォルトの名無しさん
2015/03/20(金) 14:44:11.57ID:P202Q6+8> パラメーターが数十万通り・・・
10通りのパラメータが10個で100億通り。
5通りのパラメータが10個で約1,000万通り。
数十万とか小さい小さい。
0790デフォルトの名無しさん
2015/03/20(金) 18:45:29.63ID:fFgykzENどうせ前年比+数パーを入れるだけなんだからVBAでやったら?と言ったんだが、え?!vlookup?と言われたんで見捨てました。
皆さんならどうしますか?
0791デフォルトの名無しさん
2015/03/20(金) 18:53:44.11ID:cY+yA+770792デフォルトの名無しさん
2015/03/20(金) 18:58:49.37ID:gVsIDPUr見捨てる、で正解だと思うw
0793デフォルトの名無しさん
2015/03/20(金) 19:07:47.84ID:rtxuq3Olまず上司には敬語使うように心がけるかな
0794デフォルトの名無しさん
2015/03/20(金) 19:29:13.80ID:Z8yGKqIr横で応援する。
だが決して手は出さない。
0795デフォルトの名無しさん
2015/03/20(金) 20:07:08.76ID:CMK1CytMセルに数式入れるだけで事足りるような
0796デフォルトの名無しさん
2015/03/20(金) 20:40:37.64ID:JUaMRqUbユーザーフォームにWeb Browserを追加して外部のHTMLページ(コントロール用)を読み込ませるっていう手法があるらしいけど、
その応用でExcelそのものにHTML5+CSS+jsを埋め込んで動作させるとか出来たらいいのに。
0797デフォルトの名無しさん
2015/03/20(金) 21:04:30.06ID:h8MQtvkP0798デフォルトの名無しさん
2015/03/20(金) 22:14:04.26ID:3E+pQjq6シート外との入出力系はVBAに頼らないと出来ないけど
0799デフォルトの名無しさん
2015/03/20(金) 23:35:14.35ID:JUaMRqUbつまりVBでユーザーフォームに頼らない独自のウィンドウアプリケーションを作成できる!?
0800デフォルトの名無しさん
2015/03/20(金) 23:43:59.91ID:luXrOx6rその程度なら API でなんとでもなると思うが
0801デフォルトの名無しさん
2015/03/21(土) 16:59:53.30ID:2HfMDNKF0802デフォルトの名無しさん
2015/03/21(土) 19:30:53.45ID:GRvZe6myあれ、ドラッグ&ドロップでラベルを動かして配置するUI作りたかったんだけど、そういうのも出来る?
調べても出てこなかったからあきらめてたんだけど、VBの本買えばいいのか??
0803デフォルトの名無しさん
2015/03/21(土) 21:46:25.64ID:gVnYSHkqVBAを多重稼動させるためにExcelはいくつぐらいまで起動しても大丈夫なのでしょうか?
用途的には16ぐらい動いてほしい状況ですがちゃんと動くのでしょうか?
Think different? by 2ch.net/bbspink.com
0804デフォルトの名無しさん
2015/03/21(土) 22:05:58.09ID:qnP8SmNLネタだとは思うけどできるよ
ただマジでやりたいなら、VB.NET とか C# なりでやった方が楽だと思うぞ
0805デフォルトの名無しさん
2015/03/21(土) 22:13:01.32ID:GRvZe6myマジボケでごめん・・・。Windows APIを使って引数のやりとりが出来るという発想自体が無かったんだ。
そしてC/C++の方が習熟してるんだけど、会社でやってる事だからエクセル以外使えないんだ。
0806デフォルトの名無しさん
2015/03/21(土) 22:25:57.78ID:DIvWRuL5どういうこと?
コンパイル環境(VS)がない、とか
C/C++で作成したものを稼働させる許可がもらえない、とかかな?
0807デフォルトの名無しさん
2015/03/21(土) 22:26:53.81ID:qnP8SmNL> 会社でやってる事だからエクセル以外使えないんだ。
なら無理だと言って諦めた方がいい
わざわざ苦労したいなら別だけど、会社なそんなことを評価してくれないと思うぞ
0808デフォルトの名無しさん
2015/03/21(土) 23:42:05.66ID:GRvZe6my稼働の許可もらえないってのが一番近いかな。
俺はシステム作る名目で雇われたわけじゃなくてVBA使えるって事で上司に特別に仕事を振られたので、
エクセルやアクセスのVBA以外でシステムを構築するってなると俺が便利っていう以上の理由が必要なんだよね。
0809デフォルトの名無しさん
2015/03/22(日) 00:00:20.46ID:jwoT93DU動くよ。ただ、CPUのスレッド数以上立ち上げても意味ないだろ
0810デフォルトの名無しさん
2015/03/22(日) 00:23:25.06ID:FHqRUY0cじゃあ一般企業での話なんでしょ?
作ったものがVBAかどうかなんて区別できないんじゃないかなあ。
自作dll呼び出し放題の気がするけど?
0811デフォルトの名無しさん
2015/03/22(日) 12:47:36.72ID:wjsHDVFthttps://support.microsoft.com/ja-jp/kb/287642/ja
Excel 97/2000 ドラッグ&ドロップ−ListBox⇒ListBox
http://www.moug.net/tech/exvba/0150045.html
古いものだらけだけど、だからこそ枯れてる かどうかは知らんけど 自分で試しても無いけど
会社側からすれば、人が替わっても受け継げるものでないと、その都度面倒が起きるんだ
それを嫌がるのはある ええい! やってまえ! で生半可なモノつくり置いていった人の
作品は後輩達から嫌がられてるのがほとんど そういう意味でも評価が貶められるのは現実
0812デフォルトの名無しさん
2015/03/22(日) 13:52:10.90ID:wb31i9Ft共用のもの個人のものがごっちゃになると弊害があると思う。
後者だったら自分の仕事が効率アップして自分のアドバンテージになることだけ目指せばOKだけどね。
0813デフォルトの名無しさん
2015/03/22(日) 21:27:27.96ID:ziwFlX65B1セルに test.jpg というファイル名の記載があるとします
A1セルに、B1セル記載のファイル名のフルパスを記載させたいの
ですが、どうすればいいんでしょうか。ググってみましたが、フルパス
を分離するのは見つかってるんですが、ファイル名からフルパスを取得
するのがどうしても分かりません。
0814デフォルトの名無しさん
2015/03/22(日) 21:30:30.43ID:ziwFlX65他のpcでも現在作成中のvbaを入れたいので、なんとかVBA
プログラムでフルパスを取得したいと思っています
0815デフォルトの名無しさん
2015/03/22(日) 21:41:30.15ID:fxQo9p+rそもそもその画像ファイルとExeclファイルは何の関係もないよね?
0816デフォルトの名無しさん
2015/03/22(日) 23:27:30.37ID:vsPNH1vOそのtest.jpgっていうのは、どのフォルダにあるのか決まってるのか?
たとえばそのExcelファイルと同じ場所とか、そのユーザのマイドキュメントとか
決まってるならその場所によって方法はあるかもしれん
決まってないなら、基本的に不可能
0817デフォルトの名無しさん
2015/03/22(日) 23:41:47.01ID:Ve0aRxWWSub Sample()
Range("A1") = FileSearch("C:\", Range("B1"))
End Sub
Function FileSearch(Path As String, Target As String) As String
Dim FSO As Object, Folder As Variant, File As Variant,FilePath As String
Set FSO = CreateObject("Scripting.FileSystemObject")
For Each Folder In FSO.GetFolder(Path).SubFolders
FilePath = FilePath & "," & FileSearch(Folder.Path, Target)
Next Folder
For Each File In FSO.GetFolder(Path).Files
If File.Name = Target Then
FilePath = FilePath & "," & File.Path
End If
Next File
FileSearch = FilePath
End Function
動作確認はしていない。
0818デフォルトの名無しさん
2015/03/22(日) 23:58:38.25ID:wjsHDVFt多分あちこちに分散してる画像をセルに挿入してんだろ で、元画像のファイルのプロパティを見れば
フルパスあるからそれを別セルに保存しておきたいと で、後々その画像の元フォルダを辿る必要が
出てきた時の参照としたいと 現場写真とかやってるとありがちな要求だわな
それだと画像挿入部分までVBAで処理してその途中でフルパスを取得する って手順踏まないと
挿入後だと元画像のフルパスは判別できなくなる んだろうな、たぶん
現場写真 Excel でぐぐれば山盛りサンプル出てくるから当たってみれば
0819デフォルトの名無しさん
2015/03/23(月) 00:08:20.30ID:2wZsOLL7Webサイトで最初の本日の日付で
HPのサイトでのテーブルが
|日付|__|1日|2日|〜|22日|〜|31日|
|合計|19個|0個|4個|〜|15個|〜|__|
となっていて、ここで22日が15個という値と、合計が19個という状態。
ここで取得する値がVBAを実行する日によって違う(22日なら22日の個数)ようなのって
どうしたらいいんだろう?
0820デフォルトの名無しさん
2015/03/23(月) 00:59:31.59ID:xwACqlut合計(A2), B2, C2, D2
よく知らんけど、
Date 関数か何かで、今日の日付を求めて、
例えば2日なら、C2の値を取り出す
0821デフォルトの名無しさん
2015/03/23(月) 04:26:08.07ID:CJtumJO9Excelファイルの位置も、マイドキュメントのフルパスも固定じゃないぞ
0822デフォルトの名無しさん
2015/03/23(月) 22:28:08.11ID:m+jC0G5p早起きしちまったんなら、コーヒー飲んで頭冴えてから書き込めw
おまえのフォルダのフルパスなんか知る訳ゃ無いだろw だからソコって書いたんだ
フルパスが必要ってことはローカルのみならずLANの先って場合もあるだろ
WANのケースも有るかも知らんが 散逸してるファイルを辿りたいって需要を
解決したいんじゃないのか?
いずれにしろCellに貼り付けた後じゃ知りようも無いから、取得時にリンクを確保しろってこった
http://hinden.at.webry.info/201106/article_16.html ←ほれ、ココにほぼ答え出てたわ
Excel 画像 フルパス でぐぐってこうも簡単に辿り着けるじゃねーか
ここで取得した MyPath を貼り付けたセルの左隣 ActiveCell.Offset(0,-1) = MyPath とでもすりゃいい
0823デフォルトの名無しさん
2015/03/25(水) 21:20:36.49ID:kqCenuXt返事が遅くなり申し訳ございません。アドバイスを元に、
For i = 3 To Cells(Rows.Count, 1).End(xlUp).Row
If Cells(i, 20).Value <> "" Then
s = Cells(i, 20).Value
s = ThisWorkbook.path & "\" & s 'フルパスを探す
'Range("s3").Value = s
Cells(i, 19).Value = s
Else
Cells(i, 19).Value = ""
End If
Next i
で書いてみたらなんとかいけました。同じ階層内、同じフォルダ内に
エクセルファイルと、画像ファイルを存在させるつもりなので、これで
いいのかなと思っていますがどうでしょうか。
0824デフォルトの名無しさん
2015/03/25(水) 21:22:58.95ID:kqCenuXtdim s as string
です。
0825デフォルトの名無しさん
2015/03/25(水) 21:25:10.89ID:kqCenuXt\ で代用しています。
0826デフォルトの名無しさん
2015/03/25(水) 23:02:09.61ID:sFFqA7vzこちらのHPに書かれていることを
ワードではなくエクセルでしたいのですが
どうすればよろしいのでしょうか?
0827デフォルトの名無しさん
2015/03/25(水) 23:45:14.83ID:84HX5QPEアチコチに画像詰め込んだフォルダがある そのフォルダ内にExcelファイルも置く
B列にその画像のファイル名を列記しとく で、A列にそのフォルダのフルパスが欲しい と、そおゆうこと?
それって、、 A列上から下まで全部いっしょじゃね? まごうことなく一緒だろ? マクロやVBA必要か?
もっと言えばExcel必要か? テキストファイルでよくね? 要望が読めね、、、
0828デフォルトの名無しさん
2015/03/25(水) 23:47:52.45ID:bA1UtxNWというマクロを作りたいです
Private Sub worksheet_ ??
If KeyCode = 13 and Not (Target.Row = 2 And Target.Column = 2) Then Exit Sub
テスト
End Sub
こんなイメージなのですがどういう文にすればいいでしょうか?
0829デフォルトの名無しさん
2015/03/26(木) 02:39:50.39ID:tQViIZIHワークシートやブックなんかでは、キー入力周りのイベントはサポートされてないはず
Worksheet_Changeあたりで代用するか、何やりたいか知らんが違う方法考える方が良いんじゃね
0830デフォルトの名無しさん
2015/03/26(木) 07:01:14.21ID:zxUHxD8Mそのコード、エンターキー以外だとどのセルでもテストが実行されるけどいいのか?w
0831デフォルトの名無しさん
2015/03/26(木) 07:43:43.83ID:LA0ApMoS記号置換表.csv
(置換前文字列, 置換後文字列)
A01, 第1営業部
A02, 第2営業部
A03, 第3営業部
このファイルを、Excelに読み込んで、
同じように処理すれば、置換できるのでは?
0832デフォルトの名無しさん
2015/03/26(木) 11:46:06.56ID:bzeZcoop置換用のcsvはそう作ってあるのですが
マクロがワードでは使えましたが
エクセルでは使えませんでした
0833デフォルトの名無しさん
2015/03/26(木) 13:39:20.84ID:iGJalkdz>>1
> ★5 レベルはどうあれ、ここはプログラマ用の板スレです。プログラマとは、自分でプログラムを組み、
> コードを書く人の事なので、自分でやるきは全く無く、丸投げしようって人はお断りです。
> ヒントを貰えばあとは自力でなんとかしますって人のみどうぞ。
0834デフォルトの名無しさん
2015/03/26(木) 21:17:05.53ID:H+7SuQk0はいざんねーん
Excel VBA 質問スレ Part36 [転載禁止]©2ch.net
http://peace.2ch.net/test/read.cgi/tech/1419718732/l50
0835デフォルトの名無しさん
2015/03/26(木) 21:32:15.95ID:ufaysk4i内容は、あるデータをフィルターかけて、コピーし別のシートに値貼り付けを繰り返していると起きます。
Excel以外は起動させてません。
0836デフォルトの名無しさん
2015/03/26(木) 22:02:52.90ID:t5xQu5lYいろいろ支障あるんで一旦Wordで処理したものを、もっかいExcelに戻すとかなんだろう それか楽な道を選択したとか
一回の処理量とか処理する頻度とかでもいろんな選択肢あるだろうけど、そのCSVの変換表作ってる間に
Select case や Replace でコツコツやっちまったほうが結果的に早いかも 後日の礎にもなるかもだし
0837デフォルトの名無しさん
2015/03/26(木) 22:24:28.80ID:bzeZcoopヒントをください
0838デフォルトの名無しさん
2015/03/26(木) 23:16:47.05ID:vUSUmWFZ昔よくそうなっていた
windows7 64bit office2010になってから起きなくなった
OSやofficeのバージョンが関係しているかも
でっかいコピーなら、遅くなるが一度ファイルに書いて
そこから読むなど、工夫してみたら(←例であって効果があるかどうかわからないが)
0839デフォルトの名無しさん
2015/03/27(金) 04:54:08.57ID:B/xnV6qploop
メモリを使う
GC(Garbage Collection)でメモリを解放
end
のように強制的に、GCを動かすことは出来ないの?
>>837
君は自分で、プログラムを書けるの?
0840デフォルトの名無しさん
2015/03/27(金) 08:18:33.23ID:Ry4YBg/Fコピーしている範囲がデカいか、メモリの解放が行われる前に次のコピーやっちゃってるんじゃないの?
もっとも後者は起こるか分からんけど。
対応方法としては前者なら切り貼りする範囲をもう少し刻んで数回に分けて行う。
後者なら一回貼った後少し待った後で次のを貼るってことで対応出来るんじゃないかなぁ。
0841デフォルトの名無しさん
2015/03/27(金) 15:41:53.13ID:B/xnV6qpstr は置換したい文字列。
Convert.csvが置換表(置換前, 置換後)
File.open("Convert.csv") do |file|
# CSVファイルを、1行ずつ処理する
file.each_line do |line|
# カンマで区切る。cols[0]置換前、[1]置換後
cols = line.split(',')
str.gsub!(Regexp.new(cols[0]), cols[1]) # 置換
end
end
0842デフォルトの名無しさん
2015/03/27(金) 17:05:28.27ID:YZyxoY3z0843デフォルトの名無しさん
2015/03/27(金) 18:46:07.82ID:rCZK4pznなんの処理でなんのリソースが不足してるのかもわからんし何とも言えん
>>839,841
VBAにGCとかありませんから
とっととお帰り下さい
0844デフォルトの名無しさん
2015/03/27(金) 19:29:45.13ID:bun/1N9J>>841
ここはおまえのような三流プログラマのくだらねぇテクを
披露する場所じゃありませんよw
0845デフォルトの名無しさん
2015/03/27(金) 21:52:21.46ID:6BeyT2pm0846デフォルトの名無しさん
2015/03/28(土) 04:19:55.69ID:TdpMjFgv0847デフォルトの名無しさん
2015/03/28(土) 13:15:19.97ID:u275bbRuいろいろ試した所、
dim worksheet() as worksheet
set worksheet(1)=worksheets(”いい”)
の部分を全部やめた所、エラーが無くなり、無事に動きました
いろいろ書き方と理解が間違っていたかもしれません。
0848デフォルトの名無しさん
2015/03/28(土) 14:26:17.01ID:eRZ9PNxr別のユーザーフォームを起動させることは可能でしょうか?
0849デフォルトの名無しさん
2015/03/28(土) 14:43:09.48ID:q5Ls+EKq余裕でOK
0850デフォルトの名無しさん
2015/03/28(土) 14:47:04.72ID:eRZ9PNxr0851デフォルトの名無しさん
2015/03/28(土) 17:15:43.62ID:7VDzjQQn今日のテーマは1です
注意点は画面下へ書かれています。
それではどうぞ
こんにちは
今日のテーマは2です
注意点は画面下へ書かれています。
それではどうぞ
こんにちは
今日のテーマは3です
注意点は画面下へ書かれています。
それではどうぞ
・
・
・
こんにちは
今日のテーマは100です
注意点は画面下へ書かれています。
それではどうぞ
↑このような改行入りのテキストデーターの
文中の数字の所(1箇所)のみを
1ずつ増やし連続で100まで並べ最終的には
テキストで書き出しをする場合は
どのようにコードを書けばいいのでしょうか?
0852デフォルトの名無しさん
2015/03/28(土) 17:53:11.39ID:QAYs++HiSub Sample()
Dim i As Integer
For i = 1 To 100
MsgBox "今日のテーマは" & i & "です"
Next i
End Sub
0853デフォルトの名無しさん
2015/03/28(土) 17:54:55.57ID:WTSMqzUy1から100までループ
テキストを連結して作成
ファイルに書き出し
するコードを書けば良い
どこがわからない?
0854851
2015/03/28(土) 20:53:34.13ID:C5M2xat5>>853
単数行なら>>852このコードがイメージできますが
今まで数字しか扱ったことがなかったため複数行の文字はどう処理すればいいのかイメージできませんでした
マクロ記録でやると
ActiveCell.FormulaR1C1 = "あああ"
Range("B4").Select
ActiveCell.FormulaR1C1 = "いいい"
Range("B5").Select
こう出てきましたのでこれを使って
A列に1行づつ書けば良いようですね解決できました
端的に述べると疑問点は、改行ってどうやるんだ?という話でしたw
ありがとうございました。
0855851
2015/03/28(土) 21:15:58.73ID:pZxnIH6J>>852
>>853
全く糞な質問でしたが
文字情報の部分書き換えや置換を使うと
番号をふった整理券のような物の自動作成や
HTMLにすればホームページを配列を使ってあれこれできたり
相当色々な事に応用できますね。
VBAの世界が大きく広がりました。
0856デフォルトの名無しさん
2015/03/29(日) 07:38:26.59ID:fP4a+V4vWebにある解説を見ると、
Dim c(10) as Variant
For i = 0 To 10
c(i) = i
Next i
Cells(1,1).Resize(,UBound(c)+1) = c
という様な書き方で挿入できてるけど、実際にやってみると何故か出来ない。
しかし、
挿入範囲 = Cells(1,1).Resize(,UBound(c)+1)
For i = 0 to 10
挿入範囲(1,i+1) = c(i)
Next
Cells(1,1).Resize(,UBound(c)+1) = 挿入範囲
だとちゃんと挿入される。やり方が間違ってるのか仕様が変わったのか。
0857デフォルトの名無しさん
2015/03/29(日) 15:27:14.77ID:mlKmLH/zちょっとその仕様変更は信じられん
だれか検証してくれ
0858デフォルトの名無しさん
2015/03/29(日) 16:21:54.86ID:MTuE08iQCells(1,1).Resize(,10).Value=Array(1,2,3,4,5,6,7,8,9,10)
とやって問題なく代入できたぞ。
0859デフォルトの名無しさん
2015/03/29(日) 19:00:05.38ID:mlKmLH/z.Value 省略しても行ける?
だったら>>856の勘違いで大丈夫そうだけど
0860デフォルトの名無しさん
2015/03/29(日) 19:27:35.74ID:HON2ESKs単に「できない」じゃなくて
どんなエラーが出るのか、どこで止まるのか、具体的に書いてよ。
俺はExcel2000しか持ってないから検証はできないけど。
ちなみに2000ではそのコードで問題なく動く。
0861デフォルトの名無しさん
2015/03/29(日) 19:44:22.48ID:wGTdxmyjなんでみんなこれをしないのかね。こういうのをテンプレに入れとくべきだと思うんだがなぁ。
まぁ入れても見ないだろうけどw
0862デフォルトの名無しさん
2015/03/29(日) 20:41:26.34ID:HON2ESKs0863デフォルトの名無しさん
2015/03/29(日) 20:58:36.11ID:/K2gs69FUserForm1のCommandButton1_Click()では、
変数Aを定義し、変数Aに値を格納し、UserForm1を閉じ、別のUserForm2を開く処理が記述されています。
UserForm2のCommandButton2をクリックしたときに、変数Aを利用した処理を行いたいと考えています。
UserForm2に変数Aを渡す方法をご教示いただけないでしょうか?
0864デフォルトの名無しさん
2015/03/29(日) 21:18:52.44ID:WnJdNlgUそのまま書いていけるんじゃない?
UserForm1のCommandButton1_Click()
の中にuserform2.showで変数は渡せない?
間違っていたらすみません
0865デフォルトの名無しさん
2015/03/29(日) 21:26:52.85ID:MTuE08iQCells(1,1).Resize(,10).Value=Array(1,2,3,4,5,6,7,8,9,10)
Cells(2,1).Resize(,10)=Array(1,2,3,4,5,6,7,8,9,10)
どちらも同じ結果。
0866デフォルトの名無しさん
2015/03/29(日) 22:30:06.69ID:mlKmLH/zインスタンスとか考えるとややこしいんだが、とりあえず
UserForm1にPublicで宣言して、UserForm2でUserForm1.Aで参照すれば行けるんじゃね
UserForm1をUnloadすると変数消えるかもしれんが、そのばあいはUnloadじゃなくてHideで
UserForm1にPublicな変数定義するより、UserForm2か標準モジュールあたりに定義した方が良いかもしれん
>>865
ありがと。じゃあ>>856の勘違いって事でよさそうだ
0867デフォルトの名無しさん
2015/03/29(日) 22:56:32.06ID:HON2ESKs一番簡単なのはグローバル変数を使う方法だと思うけど、変数のスコープはできる限り狭いほうが望ましいからこの方法はあまりオススメしない。
そんでさ、そもそもの前提を覆しちゃうんだけど、フォーム内で変数って使う必要ある?
フォームモジュールってのは結局、人間からの入力を受け付けたり結果を出力したりするためのものだよね?
そのためにテキストボックスとかスピンボタンとか、文字や数値を取得するための手段が用意されてるわけでしょ?
それをわざわざ変数に格納しないでそのまま他のモジュールとやり取りすれば良いんじゃないか?
たとえば
UserForm1にTextBox1とCommandButton1が有って、CommandButton1をクリックするとTextBox1に入力された値を
UserForm2のLabel1に表示するっていうコードを書くとこんな感じ
標準モジュール(シートモジュールやブックモジュールでも構わんけど)には以下のコード
Sub test
Userform1.Show
End Sub
UserForm1モジュールにはTextBox1とCommandButton1を用意しておく
コードは以下の物のみ
Private Sub CommandButton1_Click()
With UserForm2
.Label1 = TextBox1
.Show
End With
Unload Me
End Sub
UserForm2モジュールにはLabel1を用意しておく
コードは特に無し
0868863
2015/03/30(月) 01:15:08.95ID:ge81N56Gすみません。「そのまま書いていけるんじゃない?」の意味がわかりません。
>>866
解決できない場合には標準モジュールにPublicとして宣言してみます。
インスタンスとか今のところ理解できていませんので、
あなたのレスの大半が理解できず申し訳ありません。
>>867
UserForm1のTextBox1の値を
UserForm2に渡す場合でしたら貼り付けて頂いたコードで可能と思います。
ですが、後出しで申し訳ないのですが、
UserForm1からUserForm2に渡したい変数Aというのはジャグ配列です。
A (1 to N) (1 to 5) : Nは可変で10〜40ぐらいです。
配列を渡したい場合はPublicで宣言するしかないでしょうか?
0869デフォルトの名無しさん
2015/03/30(月) 06:26:45.49ID:FGaX9eOv何でPublicで宣言してはいけないのかをよく考えなければいけない。
変数を直接外部参照されたくないと言うのなら、Publicなプロパティを設定して維持する値をPrivateに指定すればいい。
そしてUserForm2は使うとき、明示的に生成して、使わなくなったら明示的に解放する。
生成するときに直接生成するのではなく、一つ関数を作ってその中で生成とプロパティへの値の受け渡しを行う。
VBAではコンストラクタに引数を渡すことが出来ないので、そのようにしてフォームからフォームへの値の引継ぎを行う。
0870867
2015/03/30(月) 06:50:14.17ID:hZPESK0V>配列を渡したい場合はPublicで宣言するしかないでしょうか?
んなこたないけど、まぁそれが一番お手軽っちゃお手軽だろうね。
ただ、何度も言うけどPublic(グローバル変数)ってのはあんまり使いたくはないし、結局はフォーム内でややこしい変数使うような設計自体が間違ってるんだと思う。
もちろんひとつのフォーム内で処理を完結できるならそういうことやっても良いんだけど、複数のフォームを遷移して処理を引き継ぐようなら個別のフォーム内でそんなにややこしい事をさせるべきではない(と個人的に思う)。
せめて大元の処理(ジャグ配列を必要とする部分)は標準モジュールに書いておいて、そこから必要に応じて個々のフォームに値を引き渡し、フォームでの入出力を終えたら標準モジュールに値を戻す。
別のフォームに対してもその繰り返し、というパターンで作っといたほうが後々のメンテナンス性とかも高いんじゃないかな?
イメージとしてはこんな感じ(ジャグ配列の書き方が良く分らんからとりあえず普通の配列で書いときます)
改行多いんで続きます……
0871867
2015/03/30(月) 06:52:38.23ID:hZPESK0VSub Test()
Dim i
Dim A(1 To 2)
With UserForm1
.Show 'ユーザーフォーム1で値を取得後、Hideで戻ってくる
'フォーム内の値を配列変数に格納
For i = 1 To 2
A(i) = .Controls("TextBox" & i)
Next i
End With
Unload UserForm1
With UserForm2
'配列変数の値をユーザーフォーム2に渡す
For i = 1 To 2
.Controls("Label" & i) = A(i)
Next i
.Show ’ユーザーフォーム2で表示
End With
Unload UserForm2
End Sub
UserForm1にはフォーム閉じる用のボタンを用意しとく
Private Sub CommandButton1_Click()
Me.Hide
End Sub
0872デフォルトの名無しさん
2015/03/30(月) 08:30:29.30ID:FGaX9eOvなんかさー、処理と値をごっちゃに考えてない?
今回の論点はフォームの値引継ぎな訳であって、ややこしいのどうのは関係ないと思う。
引き継がれた値を使用する側のFormはその下にどんな複雑な処理有ろうが、サービス層が有ろうが
ビジネスロジック層が有ろうが関係ない。それは値を受け取った側のフォームの役割だから。
その中で共通化するなら共通部品を呼び出してもいいけど、そこで値を抱えると言うのもまた役割が違う。
ましてや、標準モジュールでUserForm1がHideになった時ってのを見てるってことは、挙動にまで影響してるじゃない。UserForm1を表示したままUserForm2を表示したかったらどうするの?
それと、UserForm2のコントロールに値を設定するのは、
UserForm1の役割でも標準モジュールの役割でもないと思うんだけど。
クラス構成が理解出来ないと言うのであれば、まだ単純にUserForm2にプロパティ作って渡してやった方がマシ。
プロパティの作り方が分からないと言うのであれば、UserForm2に引き渡したい値を引数で受け取って、
それをモジュールレベルスコープの変数に格納する関数を作ればいいだけ。
難しく考え過ぎなんだよ。
0873デフォルトの名無しさん
2015/03/30(月) 08:36:31.78ID:Z5CFiRUu難しく考えすぎなのはお前だ
コントロール公開でも、プロパティでもいいけど
VBAのユーザーフォームにおいて、それらがパブリックフィールドに明確に勝る点を
初心者にちゃんと説明できるのか?
0874デフォルトの名無しさん
2015/03/30(月) 09:24:51.84ID:IplvGFPT悪いけど、それ以前の問題。
プロパティは、受け渡しされた値の格納や取得という明示的な役割を持っている。
コントロール公開?コントロールの役割はどう言うものか分かってる?
分かっているならUserForm2のコントロールがUserForm1や標準モジュールから設定されるのはおかしいってすぐ分かるよね。
もうちょっとその辺勉強した方がいいんじゃないかなぁ
0875デフォルトの名無しさん
2015/03/30(月) 12:30:52.21ID:SwYqzZJt0876デフォルトの名無しさん
2015/03/30(月) 12:39:06.77ID:IplvGFPTこれはすまない。
初心者のプログラマごっこで言われてる内容が全く理解出来ないとみえる。
0877デフォルトの名無しさん
2015/03/30(月) 12:46:52.73ID:SwYqzZJtいや、ごっこなんだから理解してないのは構わんよ。
ただここはそれをする場所じゃない。わかるよな?
0878デフォルトの名無しさん
2015/03/30(月) 12:49:22.49ID:IplvGFPTなんだ、ごっこと言うのはレベルを指しているのではないのか。
では、そっちの言う「ごっこ」の定義とは何なんだ?
思い付きで言っただけか?
0879デフォルトの名無しさん
2015/03/30(月) 14:03:10.68ID:+221ILPC0880デフォルトの名無しさん
2015/03/30(月) 14:57:33.78ID:IplvGFPT0881デフォルトの名無しさん
2015/03/30(月) 15:17:52.64ID:p2qlM+du> 分かっているならUserForm2のコントロールがUserForm1や標準モジュールから設定されるのはおかしいってすぐ分かるよね。
全然おかしくないよ。
おかしいというなら、UserForm1.TextBox1がpublicな言語仕様がおかしいということになる。
いちいちUserFform1に、getterとかsetterとかpropertyとかViewModel経由とかで実装するには、自己満足に近いね。
0882デフォルトの名無しさん
2015/03/30(月) 15:48:08.95ID:IplvGFPT使えるのと使わない方がいいのは訳がちがうよ。
そんなことを言うなら普通にUserForm2でパブリックな変数設定しちゃえばいいじゃん。
0883デフォルトの名無しさん
2015/03/30(月) 15:51:55.24ID:GSYx+SCWどうせVBA以外では使い様がない代物が出来上がるんだよね?(´・ω・`)
0884デフォルトの名無しさん
2015/03/30(月) 17:04:18.16ID:rTvnLKvE>UserForm2のコントロールがUserForm1や標準モジュールから設定されるのはおかしいってすぐ分かるよね。
>>867でそれを勧めたのはお前じゃないのか?別人ならまあコントロール公開はお前の中からは除いておいてくれ
で、VBAのユーザーフォームにおいて、プロパティがパブリックフィールドに明確に勝る点を説明できるの?
外部に公開する意志の無いフィールドなら、パブリックである必要はないわけだが
getterやsetterを経由出来るのは確かにメリットはあるが、初心者にとってそれをVBAで実装する手間暇に見合うと思うの?
今回の範囲において、パブリックフィールドを否定してプロパティを勧めるなんて、必要以上の手間暇かけさせるだけだと思うがな
0885デフォルトの名無しさん
2015/03/30(月) 17:26:16.09ID:IplvGFPTだからそれ以前の問題だと言ってるし、もっと言うと結合度の問題がデカい。
そんな作り方しちゃうと、後で手を入れるとき苦労することになる。
0886デフォルトの名無しさん
2015/03/30(月) 17:50:37.13ID:p2qlM+du> そんなことを言うなら普通にUserForm2でパブリックな変数設定しちゃえばいいじゃん。
だから、それが自己満足だって言ってるんだが。
パブリック変数を経由することに何の意味もないね。
パブリックなPropertyを経由するのも同じこと。意味が無い。
0887デフォルトの名無しさん
2015/03/30(月) 17:55:44.32ID:p2qlM+du> だからそれ以前の問題だと言ってるし、もっと言うと結合度の問題がデカい。
そういうことは、UserForm1のデータ入力先がUserForm2だけじゃなくなるときに考えればいい話。
> そんな作り方しちゃうと、後で手を入れるとき苦労することになる。
何か苦労するようなことあるか?
俺には想像もできないような苦労がきっとあるんだろうな。
0888デフォルトの名無しさん
2015/03/30(月) 18:07:21.07ID:rTvnLKvEそれ以前の問題ね
初心者に考えさせといて、悩んだら難しく考えすぎって言われてるんだがな
まあ別に、間違った内容を言ってるとは思わんから好きにすれば良いけど
0889デフォルトの名無しさん
2015/03/30(月) 20:52:57.55ID:x60hXgEg特に頻繁に投げ合うなら下手にプロシージャ通すより全部Publicで宣言して直に読ませた方がいいよなぁ。
そもそもローカル変数なんてあって無きが如しのVBAでスコープ範囲とか考えるだけバカみたいだし、
変数の目的が重複しない一連のプロシージャ同士でモジュールレベルに宣言された変数を共有し、
共有しあった同士のモジュールが互いに別のモジュールのPublic変数を読みに行く方がVBA的には理に適ってる。
だいたいDLLで読み込む関数を変えられるわけでもないから別々のモジュールの入出力をプロパティ名で統一する意味も無いし、
どうせ手で直すんだから依存度が高かろうが、その旨をコメントにでもして分かりやすくしておけば実用上は問題ない。
そしてオフィシャルで用意された関数使うより、同じ機能を持つ関数を自分で組んだ方がだいたいの場合、処理が速いというオマケ付き。
他の言語の常識が通用しないVBA恐ろしすぎ。
0890デフォルトの名無しさん
2015/03/30(月) 20:58:04.55ID:IplvGFPT1人でただ動くだけのツールでも作ればいい人の発想だな。
UserForm2で表示する文字や配列の加工をUserForm1でやるってか。
引き継いだ人は大迷惑だな。
>>887
結合度の話はもっとクラスを理解したときに出てくる。クラスを生成して同じメソッドや
プロパティ名でそのクラスの役割に合わせた別の振る舞いを行うと言ってピンと来なければまだ早い。分かった時に後で
苦労するなら今の内にちょこっとした作りでそれを回避出来るならしておけばいいと言う話。
取り敢えずその時のためにプロパティで設定しておけばいい。
>>888
そこまで深く掘り下げたのは、初心者ではなく教えてる側がイケてないコードをドヤ顔で晒し出したから。
まだ違うフォームからフォームのコントロールを弄ることに全く違和感すら感じてないみたいだし。
0891デフォルトの名無しさん
2015/03/30(月) 21:26:33.17ID:wOaPArz50892デフォルトの名無しさん
2015/03/30(月) 21:27:03.16ID:/a2cNIAv殆どの変数がpublicで泣きそうになったな
ありえんぐらい長いサブプロシージャ
何がしたいのか、何が返ってくるのかわからない関数
意味が分からないコメント
読みやすいコードは、たとえVBAでも、将来の自分の為にしっかり書こうと思った瞬間だったな
0893デフォルトの名無しさん
2015/03/30(月) 21:31:31.32ID:SH4IOcCAコードオナニーしたいやつはマ板にいけ。
0894デフォルトの名無しさん
2015/03/30(月) 21:40:28.10ID:Qy+ezY+G1から作り直せよんなもんwww
0895デフォルトの名無しさん
2015/03/30(月) 21:44:38.71ID:/a2cNIAvいや無理無理、時間も限られてるし
一から作るほど暇じゃないわw
0896デフォルトの名無しさん
2015/03/30(月) 22:05:12.15ID:F/o+TWVm2つのブックのランキングデータを比較しアップダウンを表示するVBAを作ろうと思っています。
「最新ブック」は最新のランキングで「過去ブック」は過去のランキングです。
双方共にTOP100のデータがあります。
「最新ブック」には新しくランキングINしたものがあり逆にランク外になったものもあります。
夫々のブックはその時の上から順位順にA列に順位が記載 B列に商品名が記載されています。
「最新ブック」のB列の商品名を「過去ブック」にあるか参照して
もし「過去ブック」にデータがあるなら「最新ブック」のC列にどれだけ順位が上がったかもしくは下がったかの数値を記入したいです。
もしランク外になったのなら「OUT」・新しくランクインした物は「NEW」とC列に記載したいです。
両ブックの同じ行に同じ商品名が記載されていれば比較が簡単なのですが順位が入れ替わるので
同じ行を参照しC列に数値をだせないので困っています。
どの関数をどのように使えばいいのでしょうか?
アドバイスをお願い致します。
0897デフォルトの名無しさん
2015/03/30(月) 22:38:18.25ID:idTw5kocと、思いながら動けばいいコードを書いている自分がいる。
0898デフォルトの名無しさん
2015/03/30(月) 22:44:29.33ID:wOaPArz50899デフォルトの名無しさん
2015/03/30(月) 23:45:01.75ID:IplvGFPTコードオナニーってのは自分以外はどうでもいいや的なもんだと思う。
0900デフォルトの名無しさん
2015/03/31(火) 00:03:45.46ID:Q3Hv60nc何か凄いな。1度作ったコード見せて欲しいわ。
俺はコメント入れるけど、何をやっているかのコメントは極力書かなくてもいいように作る・・・努力はしている。
出来ればそれはヘッダコメントだけにとどめておきたい。大体コード見れば何をやってるか分かるし。
どっちかと言えば何をやってるかより、何のためにやってるかの方が情報として欲しいから、
作ってて忘れない内にそっちのコメントを残すようにしてる。特にDBからSQLで値を取って来たり取ってきた値を
加工しているところ辺り。
0901デフォルトの名無しさん
2015/03/31(火) 00:06:44.03ID:P6CDl22r俺なら重複データとランキングの順位を比べるかな?
もちろんナポリタンコードで。
0902デフォルトの名無しさん
2015/03/31(火) 04:26:44.84ID:eM9+JYzuいや、VBAの仕様というか、「あっちの方が処理が速い、こっちの方が処理が遅い」というのを調べた結果から、
理に適った作り方というのを語っただけで実際にやってるわけじゃないよ。一連の流れで他の言語の話を持ってきてたからVBA独自の環境について話しただけ。
他の言語を知っていると可能な限り独立性の高いモジュールを作りたくなるけど、
だからといって初心者に強要するようなものではないし、VBAの環境に限っては間違っていると言いたいだけ。
0903デフォルトの名無しさん
2015/03/31(火) 04:44:07.20ID:eM9+JYzu関数だけでやるならVLookUpかMatchかな。ランクの上下を監視するならD:E列も使わないとやってられないと思うけど。
For Each c in Range(過去ブック.Cells(1,1),過去ブック.Cells(10,1))
最新ランク = 最新ブック.Find(d.Value)
If Not 最新ランク Is Nothing Then k = 最新ランク.Row
If k then
If k = c.Row Then
最新ブック.Cells(k,3) = "→"
Else If k > c.Row Then
If k > 10 Then
最新ブック.Cells(k,3) = "OUT"
Else
最新ブック.Cells(k,3) = "↓"
End If
Else If k < c.Row Then
最新ブック.Cells(k,3) = "↑"
End If
End If
Next
For Each c in Range(最新ブック.Cells(1,3),最新ブック.Cells(10,3))
If c.Value = "" Then c.Value = "NEW"
Next
というVBA的な解決の仕方もあるけど。
0904デフォルトの名無しさん
2015/03/31(火) 04:57:16.70ID:eM9+JYzu誤:最新ランク = 最新ブック.Find(d.Value)
正:最新ランク = 最新ブック.Find(c.Value)
0905デフォルトの名無しさん
2015/03/31(火) 05:50:10.24ID:eM9+JYzuFor Each 過去ランク in Range(過去ブック.Cells(1,1),過去ブック.Cells(10,1))
Set 最新ランク = 最新ブック.Find(過去ランク.Value)
If Not 最新ランク Is Nothing then
If 最新ランク.Row = 過去ランク.Row Then
最新ランク.Offset(0,2) = "→"
Else If 最新ランク.Row > 過去ランク.Row Then
If 最新ランク.Row > 10 Then
最新ランク.Offset(0,2) = "OUT"
Else
最新ランク.Offset(0,2) = "↓"
End If
Else If 最新ランク.Row < 過去ランク.Row Then
最新ランク.Offset(0,2) = "↑"
End If
End If
Next
For Each c in Range(最新ブック.Cells(1,3),最新ブック.Cells(10,3))
If c.Value = "" Then c.Value = "NEW"
Next
0906デフォルトの名無しさん
2015/03/31(火) 07:42:55.85ID:s6+ygsChfor i = 1 to 100
行数=worksheetfunction.iferror(worksheetfunction.match(最新ブック.cells(i,1),過去ブック.range(”a1:a100”),0),””)
if 行数〈〉”” then
最新ブック.cells(i,3)=最新ブック.cells(i,1)−過去ブック.cells(行数1,1)
else
最新ブック.cells(i,3)=”out”
endif
next
for j =1 to 100
if cells(i,3)=”” then
cells(i,3)=”out”
endif
next
これで回るかな。実験してません、、
0907デフォルトの名無しさん
2015/03/31(火) 07:58:12.15ID:s6+ygsChfor j =1 to 100
if 最新ブック.cells(i,3)=”” then
最新ブック.cells(i,3)=”new”
endif
next
0908デフォルトの名無しさん
2015/03/31(火) 08:39:18.75ID:ouUOmgwb取り敢えず仕様を無視するのをやめようよ。
何で100件のデータがあると言ってるのに10件のデータしか見ないの?
何で順位がどれだけ上下したかの数値を出したいと言ってるのに矢印なの?
商品名を当てるんじゃなくて順位をFindの対象に当てるの? 多分、どれも順位上下無しで終わっちゃうよ。
商品名をFindの対象にしたとして、Find先のシートは一覧外にも同じ値が設定されてたら拾っちゃうけどいいの?
0909デフォルトの名無しさん
2015/03/31(火) 08:40:14.56ID:gG6nRdzpいつもDictionaryをすすめてくるDictionary厨のかたがいらっしゃったが
このDictionaryって便利だな。
配列とかCollectionとかもう不要だ。
0910デフォルトの名無しさん
2015/03/31(火) 08:42:10.48ID:Q3Hv60nc直し終わった後にあげたら?
0911デフォルトの名無しさん
2015/03/31(火) 08:43:38.46ID:Q3Hv60ncディクショナリは便利だけど、参照設定しないといけない。
場合によっては面倒くさいよ。
0912デフォルトの名無しさん
2015/03/31(火) 08:48:21.92ID:gG6nRdzpあれれ?
ということは参照設定すればもっと便利に使えるということですね?
どこにチェックすればいいか教えてもらえませか?
0913デフォルトの名無しさん
2015/03/31(火) 09:20:06.06ID:KDX/jTC0path1 = ThisWorkbook.Path や
ThisWorkbook.Save で
オートメーションエラーが出るようになってしまったんですけど
原因に心当たりある方いますか?
昨日まで普通に動いてたんですが。
直接、値を与えると普通に動きます
0914デフォルトの名無しさん
2015/03/31(火) 09:58:01.20ID:z9RWcobv話題を蒸し返すようで申し訳ないですけど
フォームと変数をやり取りときには結局どうすりゃいいんですか?
VBAしか知らないので他の言語の話とか
抽象的な概念の話をされても分からないです。
できれば具体的なサンプルコードとか出してください。
0915デフォルトの名無しさん
2015/03/31(火) 10:25:46.23ID:855buxIJ> UserForm2で表示する文字や配列の加工をUserForm1でやるってか。
UserForm2が単なるViewで、そこに表示するデータを別Classで実装する場合も、UserForm2-UserForm1と
同じ関係なんだが、それでもそんなこと言うの?
> >>887
> 結合度の話はもっとクラスを理解したときに出てくる。
UserFormもクラスなんですが。
> プロパティ名でそのクラスの役割に合わせた別の振る舞いを行うと言ってピンと来なければまだ早い。
そもそもUserForm内にビジネスロジックを実装するのが筋が悪い。
UserForm2になんらかのロジックがある場合、UnitTestはどうやるんだ?
> 苦労するなら今の内にちょこっとした作りでそれを回避出来るならしておけばいいと言う話。
何度も言うが、getter/setter/propertyを通しても、それは直接Controlの値を読み書きするのと変わらない。
> まだ違うフォームからフォームのコントロールを弄ることに全く違和感すら感じてないみたいだし。
「違うフォームからフォームのコントロールを弄ること」ができるのがVBA(VB)のメリットなのに。
0916デフォルトの名無しさん
2015/03/31(火) 10:35:40.93ID:855buxIJCreateObjectすれば良いよ。
ただ、インテリセンスが効かないが。
0917デフォルトの名無しさん
2015/03/31(火) 11:46:57.62ID:z7dmzx2WVBAのようなオーバーロードもテンプレートもない言語だと、配列との使い分けで悩ましいしな。
0918デフォルトの名無しさん
2015/03/31(火) 12:51:00.68ID:vWx1RFOR話は違うが WSH のディクショナリは値として文字列しか扱えないのがすごく残念
バリアントにしといてくれれば..
0919デフォルトの名無しさん
2015/03/31(火) 12:55:13.55ID:Q3Hv60ncえー、まだやるの?
>UserForm2が単なるViewで、そこに表示するデータを別Classで実装する場合も、UserForm2-UserForm1と
>同じ関係なんだが、それでもそんなこと言うの?
当たり前でしょ。フォームである限りいつどんな仕様変更が入るか分からないし、上司に後々Viewでしか使わないと確約でも取らない限り、そんな作りは使えない。
>UserFormもクラスなんですが。
それも当たり前の話。要するにフォームもクラスとしての視点で理解していない。
>そもそもUserForm内にビジネスロジックを実装するのが筋が悪い。
誰がUserForm内に直接ビジネスロジックを書くって言ったよ。曲解も甚だしいなぁ。
>UserForm2になんらかのロジックがある場合、UnitTestはどうやるんだ?
言ってる意味が分からない。何でUserForm2に何らかのロジックが有ったら単体テストに戸惑うの?
>何度も言うが、getter/setter/propertyを通しても、それは直接Controlの値を読み書きするのと変わらない。
そんなこと言ってるから>>781みたいにUserForm1を閉じないとUserForm2が開けないような制約の付いたへんてこりんなコード組んじゃうんじゃない。懲りないねぇ。
>「違うフォームからフォームのコントロールを弄ること」ができるのがVBA(VB)のメリットなのに。
別に.Netでもフォームから別のフォームを弄ることは出来るよ。役割が違うことをみんな理解してるからやらないだけ。
だからVB6とかシステムを扱うくらいの大きさなら、よほどゆるいところで無い限り、
詳細設計の時点でつっかえされると思うよ。
0920デフォルトの名無しさん
2015/03/31(火) 13:00:21.60ID:Q3Hv60nc0921デフォルトの名無しさん
2015/03/31(火) 13:28:03.63ID:855buxIJ> 誰がUserForm内に直接ビジネスロジックを書くって言ったよ。曲解も甚だしいなぁ。
> > プロパティ名でそのクラスの役割に合わせた別の振る舞いを行う
これは、Propertyのメソッドの中で、なんらかのビジネスロジックを定義するということじゃないのか?
単にprivateな変数に値を代入・参照するだけなら、public変数となんら変わりはない。
> 言ってる意味が分からない。何でUserForm2に何らかのロジックが有ったら単体テストに戸惑うの?
「単体テスト」じゃなくて、UnitTest。テストコードを使った自動テスト。
画面にロジックが合ったらUnitTestしづらくなるのは、どんな言語でも一緒。
まあ、お前が言わんとしてることはわからんでもないが、どんな場合にもその設計思想を適応しろというのは
あまりに硬直した考えすぎる。
そもそもVBAはExcelの機能を操作するのが目的で、ThisWorkbook以下、全てのExcelオブジェクトは
UserForm1が必要なデータをUserForm2を開いて入力したい、というのが元々の要求で、素早く実装できる
方法をとっても全然かまわないと思うがね。
0922デフォルトの名無しさん
2015/03/31(火) 13:29:37.91ID:855buxIJ>そもそもVBAはExcelの機能を操作するのが目的で、ThisWorkbook以下、全てのExcelオブジェクトは
消しそびれた文章が残ってた。
無視してくれ。
0923デフォルトの名無しさん
2015/03/31(火) 13:31:15.90ID:iH7+3M/J0924デフォルトの名無しさん
2015/03/31(火) 13:37:18.20ID:855buxIJ例えばUserForm2にTextBox1があり、UserForm1でその初期値を設定してからUserForm2を開くとき、
UserForm1:
Sub foo()
UserForm2.TextBox1.Text = "hoge"
UserForm2.Show
End Sub
これだけでいい。
(UserForm2の入力結果をUserForm1に戻す必要がある場合は、もう少しコードが必要だが。)
こんなにシンプルに書けるのに、余計な仕組みをかます必要がある?
0925デフォルトの名無しさん
2015/03/31(火) 14:03:26.80ID:z7dmzx2W配列の各要素にある処理を適用する関数があって、それのディクショナリ版も欲しくなったときに同じ名前を付けたいじゃないか。generate とか。
0926914
2015/03/31(火) 14:12:55.54ID:z9RWcobv分かってる人同士で完結しないで、初心者向けの>>914の質問にもお答えお願いします。
できたら>>872の人が言ってるやり方が具体的にどういうものなのか理解したいです。
あの文章では知らない言葉が多くて意味が分からないのですが、
実際にコードを見れば多少は理解できると思うのです。
書かれたコードが結果として良いのか悪いのかはともかく、
>>871みたいにサンプルコードを書いてくれたら
何をしてるのかが実際に試せるので初心者でも分りやすいのです。
0927デフォルトの名無しさん
2015/03/31(火) 14:22:33.35ID:koel4+b2VBAというのは初心者が気軽に使っていいものじゃないよ?(´・ω・`)
ありとあらゆるコンピュータ・プログラミングに精通し、やりつくしたマスタークラスの
人間にしかVBAを使う事は許されていないんだよ?(´・ω・`)
でないと、悲劇が起こる、というか起こってきた悲惨な歴史があるからね?(´・ω・`)
0928デフォルトの名無しさん
2015/03/31(火) 14:35:23.66ID:iH7+3M/J消えろ小僧
0929デフォルトの名無しさん
2015/03/31(火) 14:48:30.53ID:855buxIJ>>872でいいよ。
別のやりかたとして、UserFormをNewする方法もある。
このやり方だと、UserFrom2を閉じても(HideじゃなくUnload)、form変数を通してUserForm2が持っている情報にアクセスできる。
Sub foo()
dim form as New UserForm2
form.GlobalVarialble = 100;
form.TextBox1.Text = "hoge"
form.Show
' From2でGlobalVariableの値を変えたり、TextBox1の内容を変えたり
Debug.Print form.GlobalVarialble
Debug.Print form.TextBox1.Text
End Sub
ごちゃごちゃやってたのは、Global変数使うなPropertyにしろ的なことや、UserForm外部からControl触るな的な話。
0930デフォルトの名無しさん
2015/03/31(火) 16:23:34.63ID:FJ2GPSZaあの文章で解らない単語が出てるようでは、コードをみても多分理解できないと思う
コードをみて、何をやってるかは多分理解できるだろうけど
なぜそういうやり方をするのかはおそらくコードからは読み取れない
設計方法の問題で、初心者にプロの開発と同等な設計を求めるか
そこまでしなくても良いかで戦ってるやつらがいるだけだから
0931914
2015/03/31(火) 17:15:58.53ID:z9RWcobvありがとうございます。
要するに>>871のやり方でも構わないというご意見なのですよね?
あれは読んで理解できたので別のやり方も知りたいのです。
>>930
とりあえず、学んでみない事には始まらないので是非サンプルお願いします。
もちろん、文章で書かれていても構わないのですけれど
ここまで読んだ限りでは貴方の文章は初心者向けでは無いというか
初心者向きの文章を書くお積りが無さそうなので
コードのほうがまだ勉強になると思います。
少なくとも、フォームとほかのモジュールの間で変数の受け渡しをする手法
を知る事は、その手法を選択する意図を知らなくても
コードを書く際の選択肢を増やすという意味で役には立つと考えています。
(結合度云々といった概念はうっすら分ってるつもりです。
そしておそらくその辺りを問題にしてらっしゃるように思いました。)
0932デフォルトの名無しさん
2015/03/31(火) 17:28:45.16ID:855buxIJ0933デフォルトの名無しさん
2015/03/31(火) 17:29:08.84ID:i/Y8nWi2相当な実力を必要とするからねー
0934デフォルトの名無しさん
2015/03/31(火) 17:34:53.58ID:FJ2GPSZa>初心者向きの文章を書くお積りが無さそうなので
ああ、正解だw
本気で学ぶ気があるなら、VBAにこだわらない一般的な設計方法を学ぶべきで
そのうえでVBA独自の事情を考慮できるようになるべきだと思う
ある程度の規模のプログラムを数多くこなさないと実感としてその設計の意義を感じられないだろうし
設計方法はこのスレの範疇を超えた話だと思う
>その手法を選択する意図を知らなくても コードを書く際の選択肢を増やす
じゃあ、ああしろこうしろはいっぱい言われてただろ
>>871ができたのなら、次はフォームのパブリック変数かモジュールのパブリック変数でやってみたら?
次はフォームのプロパティでやってみる
で、それぞれの方法でどこが良くて何が悪いか考えてみ
まあ、VBAは特殊事情が多すぎて、その辺考えるのに向いた言語じゃないんだがな
0935デフォルトの名無しさん
2015/03/31(火) 17:38:28.66ID:855buxIJ> 初心者に理解してもらえる文章を書くには、
> 相当な実力を必要とするからねー
まさに、その通りなんだが、
> 初心者向きの文章を書くお積りが無さそうなので
とか言われるとね−。(俺が言われたわけじゃないが)
0936デフォルトの名無しさん
2015/03/31(火) 17:54:31.02ID:FJ2GPSZa初心者に超優しい俺はこの程度では腹は立たないw
まあ俺には簡潔に説明できる実力もないけど
さすがにスレの守備範囲ってのがあるだろうと思ってる
0937914
2015/03/31(火) 18:13:03.66ID:z9RWcobv出来る出来ないの問題ではなく
やりたくないとかやるつもりがないとかの次元だと思うので
お願いした所でそこのところをどうこうできるものでもないのだろうと考えただけです。
>>934
>じゃあ、ああしろこうしろはいっぱい言われてただろ
>>>871ができたのなら、次はフォームのパブリック変数かモジュールのパブリック変数でやってみたら?
すみません、職業プログラマやってるわけじゃないので、
誰かにああしろこうしろ言われたこともなければ
他の言語はもちろんVBAもちゃんと学んだ事はありません。
本を2冊ぐらいとあとはOffice田中さんとかネット検索で調べた範囲で分かる事程度です。
自分の仕事の手作業を多少減らせる程度の事しかやりませんし
フォーム自体さほど使いません。
フォームをあまり使ってないので変数の受け渡しもそれほど気にしないのですが
仮にやるならグローバル変数使ってました。初心者なら普通はそうすると思います。
ただ、出来ないことが出来るようになるのは単純に楽しいですし、
どうせやるなら効率的な方法がよろしかろう程度の認識です。
>>935
そういうわけなので他意はないです。
ご気分を害されたのならごめんなさい。
0938デフォルトの名無しさん
2015/03/31(火) 19:17:39.00ID:vWx1RFOR0939デフォルトの名無しさん
2015/03/31(火) 19:20:18.77ID:vWx1RFOR> 配列の各要素にある処理を適用する関数があって、それのディクショナリ版も欲しくなったときに同じ名前を付けたいじゃないか。
それを使い分けとか言わないだろ...
0940デフォルトの名無しさん
2015/03/31(火) 19:43:00.28ID:z7dmzx2W配列とディクショナリそれ自体はトレードオフで比較されるだろうけど、配列をターゲットにした既存のライブラリがあってそれを使うと楽できる、という状況があるとする。
ここからディクショナリもターゲットにするよう、ライブラリを拡張すればいいんだけど、それはしんどいからすぐにはできない。
使い分けに悩むことになる。
それなのに>>909が
「配列とかCollectionとかもう不要だ。」とか言うからカチンと来る。
0941デフォルトの名無しさん
2015/03/31(火) 19:55:45.48ID:z7dmzx2W配列だったものをディクショナリに変えたり、やっぱり戻したり、が気にせずできるから。
VBAだとそれは難しいんじゃないか?
0942デフォルトの名無しさん
2015/03/31(火) 20:16:07.88ID:vWx1RFOR0943デフォルトの名無しさん
2015/03/31(火) 20:19:11.33ID:eM9+JYzu基本的にVBAのモジュールは内部のプロシージャが何処かに呼び出されている間しかPublicな変数をメモリに保持しない。
変数はメモリに保持されている間しか値の出し入れを受け付けてくれないので、
特定のモジュールに書かれた変数を使用したければ何でもいいからモジュール内のプロシージャを呼び出す必要がある。
そしてユーザーフォームはロードしてる間、もしくは表示している間はプロシージャが呼び出されっぱなしという扱いになる。
従ってユーザーフォーム(以下、UF)に変数をぶち込むには、
・メモリにロードしてからUF側の変数に値を入れる。(例:Load Userform1という命令がある。)
・表示させてからUF側の変数に値を入れる。(例:Userform1.Show Showの中にはLoad命令が入ってる)
・UF側に書いたPublicなプロシージャに引数を渡して、そのプロシージャが終わる前にLoadかShowさせる。
・UF側に書いたPublicなプロシージャから呼び出し元のモジュールのPublicな変数を読んでもらい、UF側のプロシージャが終わる前にLoadかShowさせる。
という方法が考えられる。Newについては俺はやった事無いので知らない。
効率的な(すなわち処理速度の速い)方法については、イミディエイトウィンドウを表示してDebug.Print CDbl(Timer)と実行するプロシージャのどっかに書くと時間が表示されるので、
他のプロシージャを呼び出す前後なんかに書き込んで比較するなどして自分でコード書いて実験してみてほしい。
自分で実験しないなら出来る出来ないの問題ではなく、やりたくないとかやるつもりがないとかの次元の話だから。
0944デフォルトの名無しさん
2015/03/31(火) 20:23:29.01ID:z7dmzx2Wレアケースと捉えるか、設計上の要点と捉えるかは、あんたの勝手だがね。
0945デフォルトの名無しさん
2015/03/31(火) 20:45:57.63ID:jLTlCPq6書き込んで値を保持しておくとじゃダメ?
それだとセルA1の値を取ってこいとか、かなり楽になります。
どんな値が入っているかも見れますし・・、初心者には分かりやすいです。
0946デフォルトの名無しさん
2015/03/31(火) 20:49:37.69ID:jxVHEXHOVBAのセル操作は遅いよ
0947デフォルトの名無しさん
2015/03/31(火) 20:57:38.92ID:ZKbW1T33はいはい、なんか触れちゃいけないところに触れちゃったみたいだな w
0948デフォルトの名無しさん
2015/03/31(火) 21:01:05.15ID:eM9+JYzu余分なワークシートを常に一枚保持できるならA列をキー、B列を値として役割を分けて、
値を保存する時はA列をキーワードで検索してヒットしなかったら新しい行に書き、ヒットしたらB列に上書きする。
値を持ち出す時はA列でヒットしなかった時、独特な値(B列に絶対保存しない様な値)を返すっていう仕組みを作ると後々知識的な意味で役に立つ。
ついでにコードを書く画面でシートを選択した時、プロパティにあるオブジェクト名を、たとえば"保存用"に変更すると保存用.Cells...などと直接アクセス出来るので便利。
0949デフォルトの名無しさん
2015/03/31(火) 21:42:14.92ID:FJ2GPSZa>誰かにああしろこうしろ言われたこともなければ
いや、このスレでいっぱい、その方法はどうのこうの言われてただろ
極端に間違った事を言ってる人はいないから、いろいろ自分で試せばいいさ
その理由が理解できなくても、今はそういう方法があるとだけ思っておけばいいんじゃね
>ただ、出来ないことが出来るようになるのは単純に楽しいですし、
極端に言えば、出来ない事が出来る用にはならん
出来る事をやる方法のバリエーションが増えるだけだ
>どうせやるなら効率的な方法がよろしかろう程度の認識です。
効率とは、何の効率?
単純なプログラム作成や、実行時のパフォーマンスで考えると
効率が下がるようなことを良しと主張してる人もいるぞ
そう言う人は、将来の変更に対応する効率を重視してる。いわゆる保守性ってやつね
向上心は悪い事ではないけど、まあ、この件でこれ以上のレスはそろそろやめにするわ
0950デフォルトの名無しさん
2015/03/31(火) 21:47:54.66ID:Q3Hv60nc>>921
>これは、Propertyのメソッドの中で、なんらかのビジネスロジックを定義するということじゃないのか?
>単にprivateな変数に値を代入・参照するだけなら、public変数となんら変わりはない。
Propertyのメソッドの中って何?大丈夫?
まあビジネスロジックにPropertyで受け取った値を直接、加工、値を基にして
他の値を取得したりしてそれらをまたビジネスロジックのプロパティに渡すことはある。
ビジネスロジック自体は当然別クラスでUserFormの中で生成されたり、使用されることもあるよ。
>画面にロジックが合ったらUnitTestしづらくなるのは、どんな言語でも一緒。
NUnitやJUnitみたいなもんでしょ。何を使ってるのか知らないけど、
単体テストって言うのはそう言うのも引っくるめて言うんだよ。
実際、.Net系はコードエディタ側に「単体テスト」タブが有って、「単体テストの設定」から行うことが出来る。
画面テストが難しいからこそ、値取得や加工するところのロジックを絡めないで、
後は値が設定されているところを確認すればいいところまで持ってけばいいじゃん。
そんなUserForm1側でちまちまロジック絡めて設定してどうすんのさ。
>まあ、お前が言わんとしてることはわからんでもないが、どんな場合にもその設計思想を適応しろというのは
>あまりに硬直した考えすぎる。
はいはい。だからクラス構成や役割もおざなりにすると。構造化言語なのにねぇ。
そう言えば前Goto文を使うのは極力避けた方がいいと言ったとき
頑なに否定してた人がいたな。何か同じニオイがする。
0951デフォルトの名無しさん
2015/03/31(火) 22:09:04.49ID:Q3Hv60ncそうだなぁ、例えばUserForm1から値を直接UserForm2に設定したとしましょう。
そこに仕様追加がやって来て、UserForm3が追加されました。
これは、UserForm1とUserForm2の値を受け取って、その値を使ってDBからデータを取得して、表示します。
ついでに同じ条件でDBから値を読み直す更新ボタンも付いていたとしましょう。
さて、UserForm3のコントロールに値を設定するのは、UserForm1、2、3に点在するのと、UserForm3に処理を
固めてしまうのと、どちらの作りの方が仕様追加対応が楽でしょう。
とでも言えば取り敢えず何で直接別画面のコントローラー に値を設定しちゃいけないか分かってくれるかなぁ。
0952デフォルトの名無しさん
2015/03/31(火) 22:13:06.11ID:HkMdwPkF条件1が負の場合、条件2が負の場合、条件3が正の場合みたいに…
やっぱりダメなんかね
0953デフォルトの名無しさん
2015/03/31(火) 22:15:32.33ID:Q3Hv60nc合間をぬって家でやるしかないか。
0954デフォルトの名無しさん
2015/03/31(火) 22:18:24.59ID:Q3Hv60ncVB6やVBAにはContinueの概念が無いからね。気持ちは分かる。
0955デフォルトの名無しさん
2015/03/31(火) 22:27:05.57ID:z7dmzx2Wいいんじゃね
0956デフォルトの名無しさん
2015/03/31(火) 22:36:03.29ID:FJ2GPSZa適切なgoto文によるメリット
馬鹿なgoto文によるデメリット
goto文禁止するデメリット
これらを総合的に判断すると、on error以外のgoto文全面禁止という結論は妥当な落とし所だとおもう
0957デフォルトの名無しさん
2015/03/31(火) 22:38:22.72ID:5HeyB+APgoto文は使い方を間違えなければ、使ってもよい。
0958デフォルトの名無しさん
2015/03/31(火) 22:40:39.16ID:Q3Hv60nc.Netで途中から復活して「負の遺産がまた増えた」と騒がれてたアレでしょ?
.Netの話で悪いけど、厳しいところでは極力フォームの暗黙のインスタンスや標準モジュールは使わないで、
シングルトンパターンのクラスを明示的に作るようにコーディングルールで定めているところもあるよ。
まぁ、そこまで厳密にはVBAではやることないし、多分出来ないけど。
それはObject指向の範囲だから、頭の片隅にでもとどめて置けばいいけど、
別のフォームからコントロールにってのは構造化の範疇だから少なくとも俺はやらないし、
そんなコード引き継ぎで渡されたら絶対ブーたれる。
0959デフォルトの名無しさん
2015/03/31(火) 22:45:32.17ID:UgHipcgW0960デフォルトの名無しさん
2015/03/31(火) 22:47:53.77ID:Q3Hv60nc>>957
今は全くその通りだと思う。
ただし、スパゲティソースの温床であることも確かだから、
コーディングルールで使うシュチュエーションを制限することが必須になるかな。
0961デフォルトの名無しさん
2015/03/31(火) 22:55:49.36ID:UgHipcgW0962デフォルトの名無しさん
2015/03/31(火) 22:59:24.26ID:Q3Hv60ncていうか数行に渡るほどの長さの感数名ってどんなときに必要なの?
0963デフォルトの名無しさん
2015/03/31(火) 23:01:44.25ID:UgHipcgWえっ
関数の行数だよ?
0964デフォルトの名無しさん
2015/03/31(火) 23:06:41.28ID:Q3Hv60ncああ、文字列数のことね。ごめん、ちょっと考えれば分かることだったな。
Javaとかだと制限見たことないけど、VBAはどうだろう。
取り敢えず、分かり易さ優先だと思うから、そう言った意味で完結に何やってるか分かり易い名前ならいいんじゃないかなぁ。
0965デフォルトの名無しさん
2015/03/31(火) 23:09:03.37ID:z7dmzx2W_1を使いたかったのに。
0966896
2015/03/31(火) 23:11:19.74ID:TUZDQGkb凄くいいお手本ありがとうございます。
Rowで過去の順位を引き出すようになんとか作って見たいと思います。
VBAは勉強したてて検索しながら参考にしてちょこちょこっとした物しか作ってませんが
パターン的な物を覚えながら複雑な物も作れるように覚えて行きたいと思います。
ありがとうございました。
0967デフォルトの名無しさん
2015/03/31(火) 23:18:54.22ID:UgHipcgW反省はしてるけど、短くするのエネルギーがいるんだよね・・・
0968デフォルトの名無しさん
2015/03/31(火) 23:21:41.94ID:Q3Hv60nc同意。よくVB.Netやってる合間にVBAやるとそれで「あ」ってなる。
0969デフォルトの名無しさん
2015/03/31(火) 23:26:14.39ID:Q3Hv60nc再度すまない。関数名じゃなくて関数そのものだったのね。
凄く適当だけど、自分の中では余程特殊な場合を覗いて2画面に表示されるくらい。
その辺規定がある仕事場もあるけど、結構マチマチ。
0970デフォルトの名無しさん
2015/04/01(水) 05:58:20.41ID:23d2B5Z/拡張性とか保守性とかいう言葉が見えた気がするけどよほど単純な働きのマクロ以外は新しいケースに合わせて一から作り直すべきだし
継続的に引き継ぐような重要なのならVBAで作るべきじゃない。
0971デフォルトの名無しさん
2015/04/01(水) 06:25:01.54ID:by1Nk6ea0972デフォルトの名無しさん
2015/04/01(水) 07:02:55.80ID:by1Nk6eaまぁ何の根拠もない持論なら俺も展開させて頂くと、VBAの資産引継ぎが無ければとっくに.Net化してるか無くなってるか。
VBAの今までの資産があるから.Net化出来ないとか、今のMicroSoftの考え方では
そんなもん無くして外部から弄れよ的な方向になってるとか風の噂でよく聞く。
まぁそうなったらそうなったで、その対応の仕事が増えるし、VBAしか出来ない人が淘汰された分の仕事が増えるから
俺個人としては寧ろありがたいけど。
0973デフォルトの名無しさん
2015/04/01(水) 07:04:32.12ID:IqBtbgK/つまり他人に引き継ぐなってこと。
もともとマイクロソフトがそう言ってることだし、OFFICE TANAKAとかでもトップページにそうただし書きがかいてある。
0974デフォルトの名無しさん
2015/04/01(水) 07:22:57.72ID:by1Nk6eaそれともページが違う?
http://officetanaka.net
0975デフォルトの名無しさん
2015/04/01(水) 07:27:41.62ID:E9lgPX7zhttp://officetanaka.net/excel/vba/tips/tips113.htm
ここの理屈馬鹿の連中に聞くより、ググったほうが為になりますよ。
ハッキリ言って使えないクズしかいませんから。
質問者そっちのけで、馬鹿なコーディング論争してる しかも、エクセル
程度のものでそんな事に時間費やしてるカスは相手にする価値もあり
ません。
投稿時間見てりゃわかるでしょw
0976デフォルトの名無しさん
2015/04/01(水) 07:28:13.75ID:E9lgPX7zいいから失せろww
おまえらカスの下らない議論は他でやれよ。ザコ。
0977デフォルトの名無しさん
2015/04/01(水) 07:39:11.55ID:by1Nk6eaOFFICE TANAKAは相変わらず初心者に優しいな。
俺もよくお世話になってる。
0978デフォルトの名無しさん
2015/04/01(水) 07:42:31.36ID:E9lgPX7zわかりやすく完結で、散々お世話になった。
0979デフォルトの名無しさん
2015/04/01(水) 08:24:29.04ID:oQJvnQwQ小さい会社ならなおさら。
0980デフォルトの名無しさん
2015/04/01(水) 08:33:56.77ID:by1Nk6ea会社だったら人の入れ替わりなんていくらでもあるだろうから。
0981デフォルトの名無しさん
2015/04/01(水) 09:04:00.22ID:/egDYYol0982デフォルトの名無しさん
2015/04/01(水) 09:38:14.80ID:NnPClKRj0983デフォルトの名無しさん
2015/04/01(水) 09:46:35.15ID:by1Nk6ea0984デフォルトの名無しさん
2015/04/01(水) 10:28:52.49ID:MxSupW0l> まあビジネスロジックにPropertyで受け取った値を直接、加工、値を基にして
> 他の値を取得したりしてそれらをまたビジネスロジックのプロパティに渡すことはある。
というコードをテストするには、画面クラスを通す必要がある。
> 画面テストが難しいからこそ、値取得や加工するところのロジックを絡めないで
厳密に言えば、今回の話は、画面クラスにビジネスロジックがあったときに、それをテストするときの話で、
何が問題かというと、画面構築コストが高い場合があるということ。
ビジネスロジックが通常Class内にあれば、100個のテストが100msで終わるのに、画面クラス内にあるが
ためにテスト実行に毎回画面構築コストのオーバーヘッドがかかり、100個のテストに5000msかかるように
なったりする。
1回のテストに100msしかかからないのならば頻繁にテストを実行するだろうが、5000msかかるとなると
テスト実行を躊躇することになり、あちこち変更してテストしたらいろんなところでTest Failになってた
みたいなことが起こりがち。
> 頑なに否定してた人がいたな。何か同じニオイがする。
俺からすれば、お前は、Gotoは適切に使えばいいよねという中で、「いや絶対Goto禁止」と叫んでる奴に見えるな。
0985デフォルトの名無しさん
2015/04/01(水) 10:30:12.48ID:MxSupW0l> 別のフォームからコントロールにってのは構造化の範疇だから少なくとも俺はやらないし、
でも、標準モジュールからWorksheetオブジェクトにはアクセスするでしょ?
それも駄目なの?
0986デフォルトの名無しさん
2015/04/01(水) 10:32:46.20ID:VV7GjGd7テンプレが無いようだが。
違っていたなら誘導よろ。
Excel VBA 質問スレ Part37 [転載禁止](c)2ch.net
http://peace.2ch.net/test/read.cgi/tech/1420841190/
0987デフォルトの名無しさん
2015/04/01(水) 10:52:51.79ID:E9lgPX7z>>985
消えろ。邪魔だ。
0988デフォルトの名無しさん
2015/04/01(水) 10:53:35.08ID:E9lgPX7zくだらねぇコーディング議論するマヌケは、マ板に引きこもってろっていうテンプレ
追加しておいてくれ。
実に目障りだ。
0989デフォルトの名無しさん
2015/04/01(水) 12:35:23.29ID:/egDYYol0990デフォルトの名無しさん
2015/04/01(水) 19:05:13.07ID:by1Nk6ea何を言ってるのか分からないけど、ビジネスロジックってフォーム内に組むもんなの?
俺の知ってるのと違うな。
0991デフォルトの名無しさん
2015/04/01(水) 19:09:42.12ID:by1Nk6eaその辺の話さわるとまた違う意味の基地外が出てくるから黙ってそこ使っておけばいいと思うよ
0993デフォルトの名無しさん
2015/04/01(水) 19:12:31.91ID:by1Nk6eaえ?
0994デフォルトの名無しさん
2015/04/01(水) 19:14:23.69ID:by1Nk6ea埋め
0995デフォルトの名無しさん
2015/04/01(水) 19:14:30.60ID:+PU+R+SLえ じゃねぇよ。
ここは質問板だ。お前のくだらない論説はマ板に言ってやれって言ってんだよ。
0996デフォルトの名無しさん
2015/04/01(水) 19:16:20.23ID:by1Nk6eaよくわからないけど、何とたたかってるのかな(*^^*)
0997デフォルトの名無しさん
2015/04/01(水) 19:34:33.95ID:/egDYYol0998デフォルトの名無しさん
2015/04/01(水) 19:37:48.83ID:by1Nk6ea0999デフォルトの名無しさん
2015/04/01(水) 19:42:19.04ID:23d2B5Z/他の言語が出来る人なら当然気がつくだろうけどVBAのは機能がとても制限されてる。
そしてその制限された部分から保守性や拡張性を考えていない設計である事も当然理解できる。
もちろん保守性や拡張性を出来るだけ高めたのを作る事は出来るけどVBAのは向いてない。
保守や拡張を念頭に入れたものを作るならVBAなんてオモチャを選択しない方がいいという話をしたんだけど
1000デフォルトの名無しさん
2015/04/01(水) 19:43:59.85ID:fYspEhnu10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。