1 名前:デフォルトの名無しさん mailto:sage [2010/04/15(木) 01:07:19 ] 過去スレ 01 pc11.2ch.net/test/read.cgi/tech/1054356121/ 02 pc11.2ch.net/test/read.cgi/tech/1168308855/ 03 pc11.2ch.net/test/read.cgi/tech/1180192018/ 04 pc11.2ch.net/test/read.cgi/tech/1189814602/ 05 pc11.2ch.net/test/read.cgi/tech/1197448064/ 06 pc11.2ch.net/test/read.cgi/tech/1205231499/ 07 pc11.2ch.net/test/read.cgi/tech/1212587819/ 08 pc11.2ch.net/test/read.cgi/tech/1219673793/ 09 pc11.2ch.net/test/read.cgi/tech/1228372971/ 10 pc12.2ch.net/test/read.cgi/tech/1235332603/ 11 pc12.2ch.net/test/read.cgi/tech/1241885130/ 12 pc12.2ch.net/test/read.cgi/tech/1247566074/ 13 pc12.2ch.net/test/read.cgi/tech/1254281104/ 14 pc12.2ch.net/test/read.cgi/tech/1262748898/ ←New! 関連スレ Excel総合相談所 91 pc11.2ch.net/test/read.cgi/bsoft/1270542226/ Word総合相談所 pc11.2ch.net/test/read.cgi/bsoft/1263719084/ 【質問不可】Excel総合相談所スレの雑談・議論スレ2 pc11.2ch.net/test/read.cgi/bsoft/1151651536/
2 名前:デフォルトの名無しさん mailto:sage [2010/04/15(木) 01:11:01 ] >>1 乙です
3 名前:デフォルトの名無しさん mailto:sage [2010/04/15(木) 07:05:02 ] rivate Sub CommandButton1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) If 2 < X < 14 And 2 < Y < 14 Then Label1.Visible = True Else Label1.Visible = False End If End Sub ワークシート上に配置したコマンドボタン(縦、横共に大きさ15) 上にマウスがある場合はラベル1を表示。 ボタンの端にある場合は非表示にしたいのですがうまくいきません。 (わけあってユーザーフォームは使わずに作りたいのですが。。。←ユーザーフォーム上はmousemoveイベントがある) 透明なラベルを後ろに配置し、そこにマウスが乗った時に ラベル1を非表示にすることはできましたが、 透明なラベルをクリックすると見栄えが悪いので上記の方法を取り組んでいます。 よろしくお願いいたします。
4 名前:デフォルトの名無しさん mailto:sage [2010/04/15(木) 08:38:37 ] このIF文実行できんの?
5 名前:デフォルトの名無しさん mailto:sage [2010/04/15(木) 08:57:49 ] で、どう動かないの? イベントはあるんだっけ? まぁあったとして、それじゃあマウスの移動速度依存だよ .netなら入ってきた、出ていったイベント使えるけど。 だから他のコントロールと連携してマウスの動きを監視するとかしないと期待する結果とはならないです。 オレだったらそのイベント1秒後にAPIでマウス座標取るようにするかな、OnTimeで。
6 名前:デフォルトの名無しさん mailto:sage [2010/04/15(木) 12:35:35 ] >>3 × If 2 < X < 14 And 2 < Y < 14 Then ○ If 2 < X And X < 14 And 2 < Y And Y < 14 Then >>4 できる。「2 < X < 14」は「(2 < X) < 14」だから、VBAの場合は常に真になる。
7 名前:デフォルトの名無しさん mailto:sage [2010/04/15(木) 12:48:45 ] わずか数ドットの範囲をチェックする方法だと、マウスを速く動かすとイベントがうまく発生しないよ
8 名前:デフォルトの名無しさん [2010/04/15(木) 12:50:20 ] commandbottunを複数用意し、clickイベントでそれぞれのcaptionを A列の一番下の行の下に表示させたいと思っています (日記で天気を入力するような感じです 晴れ曇り雨ボタンを作成して、それぞれを記入する感じです。 またこの先も追加される可能性があります) こういった複数のボタンの動作をまとめることは可能ですか? それとクリックイベントとダブルクリックイベントもまとめたいのですが、可能でしょうか 連続で押すとダブルクリックとみなされてしまいイベントが発生せず困っています 'この三行をCommandButton2.3以降もまとめたい Private Sub CommandButton1_Click() Call tenki(CommandButton1.Caption) End Sub 'ダブルクリックも同様にまとめたい Private Sub CommandButton1_DblClick(ByVal Cancel As MSForms.ReturnBoolean) Call tenki(CommandButton1.Caption) End Sub '書き込みルーチンです。 Sub tenki(tenkihensu As String) Dim gyo As Long gyo = Range("A500").End(xlUp).Row + 1 Cells(gyo, 1) = tenkihensu End Sub
9 名前:デフォルトの名無しさん mailto:sage [2010/04/15(木) 13:45:50 ] >>8 VBAでは無理。ずらっと並べて書くしかない。VBだとまとめられるんだけどねえ。
10 名前:デフォルトの名無しさん mailto:sage [2010/04/15(木) 23:13:58 ] >>8 クラスモジュールを使ったらどう? >クリックイベントとダブルクリックイベントもまとめたい 未対応です(クリックイベントのみです) 1)クラスモジュールを挿入(モジュール名 Class1) Private WithEvents myButton As MSForms.CommandButton Public Property Let SetButton(Button As MSForms.CommandButton) Set myButton = Button End Property Private Sub myButton_Click() Call tenki(myButton.Caption) End Sub 2)ThisWorkbookへ記述(CommandButton1〜CommandButton10まである場合) Private myButtonArray(1 To 10) As New Class1 Private Sub Workbook_Open() Dim i As Integer Dim Sh As Worksheet Set Sh = Sheets("Sheet1") For i = 1 To 10 myButtonArray(i).SetButton = Sh.Shapes("CommandButton" & i).DrawingObject.Object Next End Sub ※2)のコードは標準モジュールでもいいんだけど このコードが実行された時点でクラスモジュールのコードが CommandButtonと結びつき 有効(実体化)となります。 参考にしたサイト ttp://oshiete.homes.jp/qa4601661.html
11 名前:デフォルトの名無しさん [2010/04/16(金) 01:40:41 ] 最近Excel2000 VBAを勉強し始めました。 これまではCをやってきたので、その違いに戸惑っています。そこで教えてください。 1 見やすいソースになるように、TABを使って自分なりの整形するのですが、 次の行に移ると、勝手にレイアウトが変えられてしまいます。 普通のエディタのようにレイアウトを保持することは出来ないでしょうか? 2 TABが、半角スペース4つになってしまいます。TABを保持させるには、 どの設定を触れば良いでしょうか? 3 変数宣言をしないとコンパイルエラーを起こすように出来ないでしょうか? 1文字タイプミスしても変数として動作するため、ちょっと心配なんです。 4 予約語の先頭が大文字になってしまうのですが、これを止めることは出来ないでしょうか? 5 複数行をコメントアウトするのに、行選択してボタンを押すようですが、 /* */ のような記述はできないでしょうか? 6 セルを指し示すとき、Cells( y, x )で指示するようですが、 Cells( x, y )のようにすることは出来ないでしょうか? 以上です。宜しくお願いします。
12 名前:デフォルトの名無しさん mailto:sage [2010/04/16(金) 02:04:17 ] >>11 (1) できない (2) 変えられない (3) モジュールの先頭にOption Explicitと書く (4) できない (5) できない (6) できない 座標がy, xになるのはExcelに限らず表計算ソフトのルールだから慣れるしかない。 それにy, xじゃなくてr, cと覚えた方がいい。 ソース関連は別のエディタで書いてコピペするぐらいしか根本的な解決方法がない。 VBAはあくまでもVBのサブセットだから制約がかなり多い。VBAである必要性がないのならVBを使った方がいい。
13 名前:デフォルトの名無しさん mailto:sage [2010/04/16(金) 02:10:40 ] 前スレで出てたけど、予約後の先頭を大文字にしない方法は一応ある。 たとえばIfをifにしたい時はdim if [Enter]と入力してからこの行を消去する。 そうするとエディタが一時的に「if」というキーワードを記憶してくれる。 とても実用的な方法ではないけどね。
14 名前:デフォルトの名無しさん mailto:sage [2010/04/16(金) 09:20:24 ] (5)編集コマンドバーに、複数行をコメントにする機能ならあるけど
15 名前:デフォルトの名無しさん mailto:sage [2010/04/16(金) 10:08:39 ] >>12-14 みなさん、ありがとうございます。よくわかりました。 慣れるしかないって感じですね。 エディタのツール→オプション→編集のところに「変数の宣言を強制する」というチェックボックスがありました。 これは、>>12 のご回答「(3) モジュールの先頭にOption Explicitと書く 」と 同じ効果がありそうな、感じがします。 >VBAである必要性がないのならVBを使った方がいい。 VBにすると、私の質問の多くが解決されそうでしょうか? 特にTABの保持が実現できるなら、VB買おうかなと思います。 アプリを1から作るためのVBではなく、 トレース実行など、現在のVBAのようにExcelとの連携が密にできて、 Excel付属のVBAの使いにくさが解決できるなら、ぜひ買いたいです。
16 名前:デフォルトの名無しさん mailto:sage [2010/04/16(金) 10:38:47 ] (5)について ご希望のとは違うし、これが2000でも使えるかどうかは知らんけど VBEのコードを簡単にコメントブロックする方法 officetanaka.net/excel/vba/tips/tips04.htm
17 名前:デフォルトの名無しさん mailto:sage [2010/04/16(金) 11:48:08 ] >>16 うぉーーー、これは便利です。 さっそく取り入れました。キーボードから手が離れないのが素晴らしいです。 これはいいです。ありがとうございました。すばらしい。 ちなみに、初心者質問させてください。 C言語などで言う「#include "hoge.c"」のような、ソースファイル組み込みは VBAでできるでしょうか? 単にその位置に別ファイルのソースを挿入するだけの機能です。 1つのボタンでの処理が長くなってきたので、別ファイルに分割したいと思っています。 subにしてもよいのですが、変数をpublicで宣言したりとか、結構手間そうなので。 includeというキーワードで検索したのですが、見つけられませんでした。
18 名前:デフォルトの名無しさん mailto:sage [2010/04/16(金) 12:01:05 ] そもそも#include "hoge.c"とかやるのが筋が悪い
19 名前:デフォルトの名無しさん mailto:sage [2010/04/16(金) 12:09:50 ] 17です。 すごいページを見つけましたので、貼っておきます。 www.ne.jp/asahi/hishidama/home/tech/lang/index.html こういうのが欲しかった、みたいな。素晴らしいページです。 このページに依れば、VBAには、#includeは無いみたいです。 ありがとうございました。 >そもそも#include "hoge.c"とかやるのが筋が悪い そうなんですけど、 関数化で階層化すると、スタックの待避や復元などのオーバーヘッド時間で 処理が遅くなることもあるので、1関数内に書いてしまう私です。すみません。
20 名前:デフォルトの名無しさん mailto:sage [2010/04/16(金) 12:43:52 ] アホか
21 名前:デフォルトの名無しさん mailto:sage [2010/04/16(金) 13:22:40 ] 関数呼び出し程度のオーバーヘッドが嫌なのに、VBやVBA使うの?
22 名前:デフォルトの名無しさん mailto:sage [2010/04/16(金) 13:29:37 ] すみません。組み込み屋なので、マイコンのときは気にしてしまいます。 エクセルはPCなので関係ありませんが、 記述スタイルを踏襲したいんです。
23 名前:デフォルトの名無しさん mailto:sage [2010/04/16(金) 14:22:26 ] 頭固すぎw
24 名前:デフォルトの名無しさん mailto:sage [2010/04/16(金) 14:26:57 ] コボラーがJavaやるみたいなもんか
25 名前:デフォルトの名無しさん mailto:sage [2010/04/16(金) 15:25:52 ] (;゚д゚)ァ
26 名前:デフォルトの名無しさん mailto:sage [2010/04/16(金) 16:31:15 ] だめだこりゃ
27 名前:デフォルトの名無しさん mailto:sage [2010/04/16(金) 16:54:02 ] 言語仕様や開発環境の違いをいちいち気にしてたら仕事にならない。適応力を試されてると考えるんだ。 複数の環境を使い分けられない人間はプログラマーをやる資格がない。
28 名前:デフォルトの名無しさん mailto:sage [2010/04/16(金) 22:25:21 ] 最近打ち合わせでは分かり切ったことは飛ばして話を進めているのに 知識として持っててあたりまえのことを質問する馬鹿が増えた
29 名前:デフォルトの名無しさん mailto:sage [2010/04/17(土) 13:12:27 ] TABの保持にこだわる理由が分からん 変数の宣言位置を揃える古臭い書き方でもしてるのか?
30 名前:デフォルトの名無しさん mailto:sage [2010/04/17(土) 13:18:02 ] むしろ半角スペースになった方が揃うでしょ
31 名前:デフォルトの名無しさん mailto:sage [2010/04/17(土) 13:18:44 ] どんなエディタで見ても、ね もちろん固定幅フォントにする必要はあるが
32 名前:デフォルトの名無しさん mailto:sage [2010/04/17(土) 19:52:46 ] 2つのシートに行った来たりして、変数に数値を入れるマクロができました。 sub ○○を 標準モジュール、module1に記述しています。 ボタンを作ってクリックすればマクロが動かせると言うことで、 sheet1にボタンを作って、clickにて動くようにしたところ(コードはsheet1に移動) rangeコマンド等が、sheet1を書き換えるようになってしまいました。 sheets("sheet2").select range("A1").value = hogehoge みたいな感じにして、従来はきちんとsheet2のA1に数値が入っていたのですが、 sheet1のA1に数値が入るようになってしまいました。 with sheet1のような感じになっているのですが、 どのように対処すればいいでしょうか?
33 名前:デフォルトの名無しさん mailto:sage [2010/04/17(土) 20:00:25 ] VBAを捨てる
34 名前:デフォルトの名無しさん mailto:sage [2010/04/17(土) 20:03:15 ] 説明がよくわからないのでその.xlsをうpしてください
35 名前:デフォルトの名無しさん mailto:sage [2010/04/17(土) 20:46:39 ] >>32 その説明では状況がまったくわからないので答えようがない
36 名前:デフォルトの名無しさん mailto:sage [2010/04/17(土) 22:03:54 ] withsheet2で
37 名前:デフォルトの名無しさん mailto:sage [2010/04/17(土) 22:05:30 ] >>32 range("A1").value = hogehoge のコードもsheet1にあったりする? この状況だと対策は Rangeへ シート指定する or コードを標準モジュールに戻す
38 名前:デフォルトの名無しさん mailto:sage [2010/04/17(土) 23:47:36 ] >>32 それぞれのモジュールで MsgBox Range("a1").WorkSheet.Nameとしてみな。
39 名前:デフォルトの名無しさん [2010/04/18(日) 01:39:24 ] >>29 >TABの保持にこだわる理由が分からん キミにはわからないだろうな、きっと。
40 名前:1/2 [2010/04/18(日) 02:05:26 ] 以下のようなランダム出題によるYES,NOクイズをつくりました。 しかし、無駄な記述が多すぎてクイズが100や200になったときには処理が遅くなる気がするのと、 もっと見易い書き方ができるような気がします。 (例えばいちいち問題文に""をつけるのは面倒くさいので、ans部分で一括してつけるとか) 修正できる方、修正お願いします。 また三択以上の問題(例.a.明智光秀、b.豊臣秀吉、織田信長)にするときの記述も思いつかないので、 そちらも教えてください。 Dim a As String Dim b As Integer Dim c As Integer b = Int(3 * Rnd + 1) If b = 1 Then a = "本能寺の変を起こしたのは明智光秀である" c = 0 ElseIf b = 2 Then a = "関ヶ原の戦いは1500年に起こった" c = 1 Else a = "平城京が移転したのは710年である" c = 0 End If ans = MsgBox((a + "?"), vbYesNo, "質問")
41 名前:2/2 [2010/04/18(日) 02:06:08 ] If c = 0 Then Select Case ans Case vbYes MsgBox "正解" Case vbNo MsgBox "不正解" End Select Else Select Case ans Case vbNo MsgBox "正解" Case vbYes MsgBox "不正解" End Select End If
42 名前:40 mailto:sage [2010/04/18(日) 02:11:21 ] なお、一から書き直した方が作りやすい場合は、 私の記述を元にせずに、そちらを書いて下さい。
43 名前:デフォルトの名無しさん mailto:sage [2010/04/18(日) 02:16:37 ] 無駄な記述が多すぎ 一から書き直した方が作りやすい おまえに書いてやったら何かくれるなら書いてやらんでもない
44 名前:デフォルトの名無しさん mailto:sage [2010/04/18(日) 02:25:42 ] 問題をプログラムに埋め込むな せっかくExcel使ってるんだから 問題文と正解・不正解を シートに記述出来るように汁
45 名前:デフォルトの名無しさん mailto:sage [2010/04/18(日) 08:17:25 ] >>40 そのままでも100や200なら大して遅くはなりませんから安心して下さい。 丸写しは感心しないので、まずは二択のプログラムを作ってみせてください。 二択の問題の例 問題 本能寺の変を起こしたのは誰か?aかbで答えなさい。 選択肢 a.明智光秀、b.豊臣秀吉 解答 ( )
46 名前:デフォルトの名無しさん mailto:sage [2010/04/18(日) 09:00:20 ] b
47 名前:デフォルトの名無しさん mailto:sage [2010/04/18(日) 09:05:52 ] c 織田信長
48 名前:デフォルトの名無しさん mailto:sage [2010/04/18(日) 09:09:57 ] 俺をaとかbとか記号で呼ぶな
49 名前:デフォルトの名無しさん mailto:sage [2010/04/18(日) 09:51:25 ] d. 徳川家康 e. 千利休 f. 柴田勝家
50 名前:デフォルトの名無しさん mailto:sage [2010/04/18(日) 22:19:22 ] かなり既出であれば申し訳ありません VBAでPDFファイルを作成したいのですが,以下の件で困っています ・ファイル名,出力先フォルダを指定できない 1,2回であれば,手作業でもかまわないのですが, 各事業所毎に出力するため30回ちかく保存先ダイアログが出る度に ファイル名を入力して保存しています。 PCにはAcrobat,クロセPDF2などがインストールされています。 よろしくご指導ください。
51 名前:1/2 [2010/04/19(月) 01:01:43 ] >>43-45 ありがとうございます。 参考にして2択問題をつくってみました。 vbyesnoでは作り方がわからなかったため、 ボタン式ではなくaかbを入力式にしました。 皆さんなら言うまでもなくわかると思いますが、 A列に問題文(本能寺の変をry)、B列に選択肢a(明智光秀)、 C列に選択肢b(豊臣秀吉)、D列に答え(a)がエクセルに入ってます。 Dim a As String Dim b As String Dim c As String Dim ans As String Dim d As String Dim i As Integer i = 1 a = Cells(i, 2).Value b = Cells(i, 3).Value c = Cells(i, 1).Value d = Cells(i, 4).Value
52 名前:2/2 mailto:sage [2010/04/19(月) 01:02:31 ] ans = InputBox(c + "? aかbで答えなさい。" & vbCrLf & "a." & a & " b." & b) If ans = d Then MsgBox "正解" ElseIf ans <> "a" And ans <> "b" Then MsgBox "aかbで答えて下さい" Else MsgBox "不正解" End If
53 名前:デフォルトの名無しさん mailto:sage [2010/04/19(月) 01:12:36 ] クロセPDF2は使用禁止です
54 名前:デフォルトの名無しさん mailto:sage [2010/04/19(月) 02:00:16 ] × クロセ ○ クセロ
55 名前:デフォルトの名無しさん mailto:sage [2010/04/19(月) 02:02:42 ] >>50 出力する方法はたくさんありますし、何もかも説明するのは不可能です。 今はどんなマクロで出力していますか。保存の部分を書いて下さい。 たぶん少し修正するだけで自動化できる可能性があります。
56 名前:デフォルトの名無しさん mailto:sage [2010/04/19(月) 02:40:55 ] >>51 その方法だと、三択の時は解答がE列、四択だと解答がF列になってしまいます。 目的(この場合は解答)が同じセルは同じ列にまとまるようにすれば、 プログラムを作る手間が少なくなります。もう一工夫しましょう。
57 名前:デフォルトの名無しさん mailto:sage [2010/04/20(火) 08:41:10 ] Invoke()は使えますか?またはその代替
58 名前:デフォルトの名無しさん mailto:sage [2010/04/20(火) 20:12:19 ] IDispatch::Invokeなら、遅延バインディングしてれば内部で勝手に使うだろ。
59 名前:デフォルトの名無しさん mailto:sage [2010/04/21(水) 00:33:10 ] >>56 なるほど。 つまり、A列が問題としたらB列を解答として、 数が可変な選択肢は最後の方の列に羅列した方がいいというおとですね。
60 名前:デフォルトの名無しさん [2010/04/21(水) 14:39:31 ] 質問です VBAのFSOを使ってファイルを抽出 データのファイル名や最終アクセス日などリスト化 ここまではできたのですが指定した日付より 前のアクセス日時のものをほかの列にリスト化するということが できません、どなたか教えて頂けませんか?
61 名前:デフォルトの名無しさん mailto:sage [2010/04/21(水) 14:49:42 ] それはご愁傷様です
62 名前:デフォルトの名無しさん mailto:sage [2010/04/21(水) 15:54:34 ] オートフィルタ→コピー
63 名前:たろう [2010/04/21(水) 19:32:46 ] テキストボックスの設定でコンボボタンをクリックしたらテキストぼっくっすの数値をシート1のA列に記入しなさい とまではわかったのですがテキストボックスが空白の時にデバックがかかってしまうのですが どうやればかいひできますか?
64 名前:デフォルトの名無しさん mailto:sage [2010/04/21(水) 19:36:27 ] テキストボックスが空白の時にテキストぼっくっすの数値をシート1のA列に記入しないようにすればいいよ
65 名前:たろう [2010/04/21(水) 19:36:52 ] どうすればいいですか?
66 名前:デフォルトの名無しさん mailto:sage [2010/04/21(水) 20:56:33 ] そんな初歩的な・・・。
67 名前:デフォルトの名無しさん mailto:sage [2010/04/21(水) 22:47:15 ] 文字列をひっくり返す関数下さい in→あいうえお out→おえうあい こんな感じのです
68 名前:デフォルトの名無しさん mailto:sage [2010/04/21(水) 23:24:02 ] 特定の文字列を逆転させる サンプルマクロは、アクティヴシートのA1の文字列を逆転させます。 Sub Sample() Dim myStr As String Dim myLetter As String Dim i As Integer i = Len(Range("A1").Value) + 1 While i > 1 i = i - 1 myLetter = Mid(Range("A1").Value, i, 1) Select Case StrConv(myLetter, vbWide) Case "゛", "゜" i = i - 1 myLetter = Mid(Range("A1").Value, i, 2) End Select myStr = myStr & myLetter Wend Range("A1").Value = myStr End Sub
69 名前:デフォルトの名無しさん mailto:sage [2010/04/22(木) 14:37:40 ] >>67 Function 反転(S) For i = 1 To Len(S) T = Mid(S, i, 1) & T Next 反転 = T End Function
70 名前:デフォルトの名無しさん mailto:sage [2010/04/22(木) 14:41:08 ] VBAで出来そうで思いつかないので知恵を貸してください。 1.ある商品を数箇所に店舗に卸します。 2.それぞれの店舗のオーダー数はバラバラですが、カートンは出来るだけ共通のものを使いたいと思います。 ただし、取扱いに困るほど大きいものは使えません。 3・それぞれの店舗の発注数を入力するだけで、最適なカートン入数を弾き出せないでしょうか? <例> 靴の発注(10足〜20足入りが最適) 店舗A 120足 店舗B 82足 店舗C 118足 店舗D 180足 10足入りをメインにすると、2足と8足入りの端数が出るため3種類のカートンが必要になります。 20足入りでも同様です。 そこで12足入りにすると、 店舗A 12足入*10 = 120足 店舗B 12足入*6 + 10足入 = 82足 店舗C 12足入*9 + 10足入 = 118足 店舗D 12足入*15 =180足 ということで12足入と10足入の2種類で済みます。 こういった計算を自動でするにはどの様な式を組めばいいのか知恵を貸して頂きたく・・。 もしかしたら他スレで訊くべき内容かもしれませんが、計算に強い方がいらっしゃいましたら 知恵を貸してくださいm(_ _)m
71 名前:デフォルトの名無しさん [2010/04/22(木) 14:42:20 ] ageさせてください!
72 名前:デフォルトの名無しさん mailto:sage [2010/04/22(木) 15:07:34 ] >>70 条件が「取り扱いに困るほど大きい」では計算ができません。 いくつ以下、と具体的な数字で示して下さい。
73 名前:デフォルトの名無しさん mailto:sage [2010/04/22(木) 15:15:59 ] >>67-69 Mid statementを使えば、For i=1 To Len(s)/2でできるだろ
74 名前:デフォルトの名無しさん mailto:sage [2010/04/22(木) 15:20:17 ] >>70 10足分入るカートンと、12足分入るカートンの2種類があって 最適な組み合わせを調べたいってこと?
75 名前:デフォルトの名無しさん mailto:sage [2010/04/22(木) 15:22:28 ] >>72 商品によって変わるので一概に言えません。 (例としては靴の場合で10-20足入としました) とりあえず変数で示して頂ければ幸いです。 実務上では品目ごとにを許容範囲を設定し、参照する形にしたいと思います。
76 名前:デフォルトの名無しさん mailto:sage [2010/04/22(木) 15:30:54 ] >>74 全数を最小の種類のカートンで出荷するには、何足入と何足入のカートンを用意すればいいのか? ということを調べたいのです。 例では、 10足入の場合は、他に12足入と18足入の合計3種類カートンを作らなくてならないのに対し、 12足入では12足入と10足入の2種類で済むので効率的です。 実際は取引先も扱い商品も多数あり、いちいち考えるのが大変なので、 自動で最適結果を出したいと思っています。
77 名前:デフォルトの名無しさん mailto:sage [2010/04/22(木) 15:51:37 ] 素因数分解と最大公約数がミソだが カートン候補がありすぎるとプログラムも大変だな
78 名前:デフォルトの名無しさん mailto:sage [2010/04/22(木) 16:06:33 ] まず4C2で6通りの最大公約数を求める @ この6つの公約数を見比べて、標準カートン10前後の奴の数が多い奴で1つ確定 30とか40とか大きくなったら10にするような処理が必要 それでまず2店舗〜4店舗が確定 残りの2店舗で割り切れない場合 A その2店舗の最大公約数があればそれでもう1種確定 それがなければ B @の確定カートンで割った余りを求め、その余り2つに公約数があれば確定 それもなければ C Bの商から1減らしてあまりを求め(つか、さっきの余りに@をプラスして)、その2つに公約数があれば確定 @で、標準カートンに近いものがない場合(2とか3とかにしかならない) 強引にカートンを10にしてしまいBから以下を4店舗分繰り返す
79 名前:デフォルトの名無しさん mailto:sage [2010/04/22(木) 16:10:07 ] 仰るとおり、因数分解と公約数だな、と思ったのですが、 これが中々難しくて・・・ アタマが痛くなってきてしまいましたw
80 名前:デフォルトの名無しさん mailto:sage [2010/04/22(木) 16:16:31 ] 店舗Eの発注が9足だった場合、許容範囲を9〜に下げて そして9個いりのカートンは使うってことなのかな?
81 名前:デフォルトの名無しさん mailto:sage [2010/04/22(木) 16:24:02 ] 力づくで計算したらいいのに For K=カートン最小値 To カートン最大値 S=必要数(K) If S > 暫定必要数 Then S = 暫定必要数 Next
82 名前:デフォルトの名無しさん mailto:sage [2010/04/22(木) 16:32:03 ] >>80 1つ違うくらいならそうしたいですが、大幅に違う場合は例外として扱うことになると思います。 (1000-5000個が適用範囲の商品に、15個の発注が来た場合など) ただ、実際にはあまり少量のオーダーは受けないので無視して良い事例かと思います。 >>78 ちょっとイメージできないので考えさせてください・・ 皆さんありがとうございますm(_ _)m
83 名前:デフォルトの名無しさん mailto:sage [2010/04/22(木) 16:38:46 ] VBAに関係ないことになると嬉々としてレスする奴がいるよな
84 名前:デフォルトの名無しさん mailto:sage [2010/04/22(木) 16:39:33 ] 単純に 下1桁が2の倍数なら、12カートンを(1桁/2)個用意すれば、残りは10カートンで済む どうせ奇数はないんでしょ?あっても繰り上げすれば済む 結論 全て12と10のカートンでおk
85 名前:デフォルトの名無しさん mailto:sage [2010/04/22(木) 17:02:46 ] >>84 すみません。カートン総数も減らしたいので出来るだけ多くパッキングしたカートンを基本にしたいのです。 書いてなかったですね。申し訳ない。 奇数もありますが、ご指摘のとおり繰上げ処理でも問題ないです。 なんかスレ違いな気がしてきたので、もうちょっと考えてみますねw スレ汚し失礼しましたm(_ _)m
86 名前:デフォルトの名無しさん mailto:sage [2010/04/22(木) 17:04:14 ] ↑ この書き込みの意図がわかりません
87 名前:デフォルトの名無しさん mailto:sage [2010/04/22(木) 17:32:08 ] 端数を切り上げてもいいんなら、12個入りのカートン1種類だけでいいじゃん なんか条件が曖昧すぎるよ コンピューターのプログラムってのは、もっと厳密に数字が決まってなきゃ作れないんだよ 条件が色々あるんなら、そのすべてをリストアップするか、法則を決める必要がある
88 名前:デフォルトの名無しさん mailto:sage [2010/04/22(木) 17:38:18 ] 1カートン1個なら端数は出ないし1種類で済む それでは困る場合は、「1カートンは最低でも何個以上にするか」「カートンは何種類以下に抑えたいか」 「端数がいくつまでなら切り上げ可能か」のような数字を商品ごとにすべて決めてデータベース化しないと。
89 名前:デフォルトの名無しさん mailto:sage [2010/04/22(木) 18:00:49 ] >>85 商品別にカートンと個の間に、もう1つ数量の単位(組とか)を設定する。 上記例の靴だったら2個=1組 適用範囲1000〜5000個のものだったら200個=1組 みたいなかんじ。 組数以下の端数は1組として切り上げる。 こういう設定でできないかな?
90 名前:デフォルトの名無しさん mailto:sage [2010/04/22(木) 18:28:59 ] エクセルが高くて買えないんですけど、タダで勉強するにはどうすればいいんでしょうか?
91 名前:デフォルトの名無しさん mailto:sage [2010/04/22(木) 18:32:01 ] >>90 openoffice
92 名前:デフォルトの名無しさん mailto:sage [2010/04/22(木) 18:32:38 ] >>90 ttp://msdn.microsoft.com/ja-jp/library/bb386107(v=VS.100).aspx
93 名前:デフォルトの名無しさん mailto:sage [2010/04/22(木) 18:33:43 ] 体験版 www.forest.impress.co.jp/article/2006/12/12/msoffice2007trial.html
94 名前:デフォルトの名無しさん mailto:sage [2010/04/22(木) 19:43:39 ] 勉強するだけなら買わなくてもいいだろ ネットの解説サイトを見て回ってればいい 実際に使いたいなら>>91-93
95 名前:デフォルトの名無しさん mailto:sage [2010/04/22(木) 22:15:02 ] どうもありがとうございます! タダでずっと使えそうなOPENOFFICEで頑張りたいと思います
96 名前:デフォルトの名無しさん mailto:sage [2010/04/22(木) 23:48:31 ] コードを"ゴリゴリ書く"ってよく言うけど、 これってVBAにも当てはまると思う? Cやアセンブラならゴリゴリが似合うけど、 VBAならベタベタとか、ポロポロとかの方が 似合う気がするんだけど。
97 名前:デフォルトの名無しさん mailto:sage [2010/04/23(金) 03:52:47 ] >>96 ゴリゴリ書くって表現は、処理の根幹部分で既存のライブラリに頼らないとか、 規模が大きかったり開発期間が短い場合に使うものだから、言語の違いは直接は関係ない。 けど、VBAはOfficeの特定の作業を自動化するのが目的の言語だから、 関数を数個書いて終わるケースが大半を占める。「ゴリゴリ書く」ことも少ないだろうね。 たまに大規模なアプリをVBAで作っちゃう人もいるけど、それはVBを使った場合にくらべて 開発効率や処理効率が悪いことがほとんど。
98 名前:デフォルトの名無しさん mailto:sage [2010/04/23(金) 04:04:01 ] すべてのヘルプを読んでから質問するように
99 名前:デフォルトの名無しさん mailto:sage [2010/04/23(金) 07:06:09 ] VBA初心者です この言語にはポインタみたいなのはないんでしょうか? リンクリストとかのデータ構造はどうやって実装しているんですか?
100 名前:デフォルトの名無しさん mailto:sage [2010/04/23(金) 07:42:43 ] >>99 ポインタ型はありません。 リスト構造も標準では用意されていないので、実装はプログラマー依存です。 単なる整数型のインデックスと配列の組み合わせで実現することが多いと思います。
101 名前:デフォルトの名無しさん mailto:sage [2010/04/23(金) 09:46:20 ] >>97 どうもありがとう。 ゴリゴリってそういう意味があったんですね。 知りませんでした。 ちょっとしたネタのつもりが良レスもらって感謝です。
102 名前:デフォルトの名無しさん mailto:sage [2010/04/23(金) 12:03:27 ] 教えてください。 WinXP SP3 office2000を使っています。 ボタン1とボタン2があり、どちらのボタンを押しても ボタン1の色が変わるようにしたいのです。 以下のようにして記述したのですが、色が変わりません。私は何か勘違いしているのでしょうか? Private Sub CommandButton1_Click() CommandButton1.BackColor = QBColor(10) ' ボタン1のボタン色を変える 実行される Call hoge1 ' 関数1を実行 CommandButton1.BackColor = QBColor(15) ' ボタン1のボタン色を戻す 実行される End Sub Private Sub CommandButton2_Click() CommandButton1.BackColor = QBColor(10) ' ボタン1のボタン色を変える 実行されない Call hoge2 ' 関数2を実行 CommandButton1.BackColor = QBColor(15) ' ボタン1のボタン色を戻す 実行されない End Sub 宜しくお願いします。
103 名前:デフォルトの名無しさん mailto:sage [2010/04/23(金) 13:09:52 ] 期待通りに動いていないんだから どうみても勘違いです ほんとうにありがとうございました
104 名前:デフォルトの名無しさん [2010/04/23(金) 13:27:55 ] >>102 変わるぞ 三つ目を用意して Private Sub CommandButton3_Click() CommandButton1.BackColor = QBColor(10) ' ボタン1のボタン色を変える 実行されない Call hoge2 ' 関数2を実行 CommandButton1.BackColor = QBColor(1) ' ボタン1のボタン色を戻す 実行されない End Sub 試してみては
105 名前:デフォルトの名無しさん mailto:sage [2010/04/23(金) 13:56:25 ] マクロはときどき壊れるからなぁ 最後に正常に動いていたときの バックアップを取るのは必定
106 名前:デフォルトの名無しさん mailto:sage [2010/04/23(金) 17:02:38 ] >>104 追試、ありがとうございます。そうですか、動きますか。 もう一度やってみたのですが、僕の場合は動きませんでした。 hoge2関数の処理時間が3秒程度と長いので、 ボタンの色を変えて処理中であることを示したいのです。 しかし自身のボタン色ではなくて、他のボタン色を操作します。 もしかしたら他のボタンのことは操作できないのかと思っていました。 ボタン色の指示行の間に入れた関数処理自身は 正しく実行されるのですが、 指示したボタンの色がまったく変化しません。 まるで「どのみち元の色になるんだから、色を変えるのは省略します」と 言っているみたいです。
107 名前:デフォルトの名無しさん mailto:sage [2010/04/23(金) 17:04:05 ] >>102 単に関数2が一瞬で終わってるだけじゃないか?
108 名前:デフォルトの名無しさん mailto:sage [2010/04/23(金) 17:10:09 ] 2003でこれ動くよ Private Sub CommandButton1_Click() CommandButton1.BackColor = QBColor(15) End Sub Private Sub CommandButton2_Click() CommandButton1.BackColor = QBColor(10) End Sub
109 名前:デフォルトの名無しさん mailto:sage [2010/04/23(金) 17:17:37 ] doeventはさんでみるとか?
110 名前:デフォルトの名無しさん mailto:sage [2010/04/23(金) 17:31:05 ] ホンとだ 間に処理かますと処理後の色変更しかしやがらねー
111 名前:デフォルトの名無しさん mailto:sage [2010/04/23(金) 17:51:22 ] みなさん、いろいろ試してくれて、ありがとうございます。 僕は、以前に作ったExcelブックを使い回していて、必要に応じてボタンをcopyしたりして使っています。 なので自分で新規にボタンを作ったことがありません。 調べてみると、僕の使っているボタンは「オートシェープ」という部品のようです。 ボタンとオートシェイプとの違いで、できる/できない があるのでしょうか。 ちよっとパニックです。 >>110 ありがとうございます。できないですよね。 どうしてなんでしょう。もし何かヒントがあればおしえてください。宜しくお願いします。
112 名前:デフォルトの名無しさん mailto:sage [2010/04/23(金) 17:55:17 ] >>111 じゃあたぶんボタンの名前を間違ってるだけだな あとシェープじゃなくてシェイプな。大した違いではないけど何か調べるときに 検索やヘルプでひっかかりにくくなるから正しく覚えておいた方がいい
113 名前:デフォルトの名無しさん mailto:sage [2010/04/23(金) 18:06:43 ] >>111 しばらく触ってなかったんでキーワードがみつからないが 色変更させてからシートなりオブジェクトなりを強制再描画させるとかの技はあるはずだ でなきゃ点滅処理さえ効かない
114 名前:デフォルトの名無しさん mailto:sage [2010/04/23(金) 18:16:36 ] >>111 hogeを呼ぶ前に DoEventsでうまくいった
115 名前:デフォルトの名無しさん mailto:sage [2010/04/23(金) 19:19:25 ] >>105 マクロはときどき壊れるからなぁ マクロはときどき壊れるからなぁ マクロはときどき壊れるからなぁ
116 名前:デフォルトの名無しさん mailto:sage [2010/04/23(金) 20:19:54 ] >>103 >>104 >>105 >>112 死んでよし
117 名前:デフォルトの名無しさん mailto:sage [2010/04/23(金) 20:49:19 ] Mid関数と、Mid$関数の違いって、戻り値をバリアント型で返すか、文字列型で返すかだよね? バリアント型で返さないとエラーになる場合ってのはどういうとき?
118 名前:デフォルトの名無しさん mailto:sage [2010/04/23(金) 21:15:36 ] >>115 あの餌で釣れるとは思わなかったんだが・・・
119 名前:デフォルトの名無しさん mailto:sage [2010/04/23(金) 21:18:03 ] >>116 マクロはときどき壊れるからなぁ マクロはときどき壊れるからなぁ マクロはときどき壊れるからなぁ
120 名前:デフォルトの名無しさん mailto:sage [2010/04/23(金) 22:15:47 ] >>117 違う どっちも戻り値はString型
121 名前:デフォルトの名無しさん mailto:sage [2010/04/24(土) 00:06:09 ] オブジェクトブラウザで見ると、一応バリアント型とString型に分かれているけど、 評価しようとした時点で、必要に応じて自動でバリアント経由になってしまうから、 結果的に同じ意味にしかなり得ない、って感じかと。 VBA上では単にMid$がMidのエイリアス扱いの可能性もあるけど、それは判断のしようがない。 WindowsSDK付属のOLE/COM Object Viewerで「Visual Basic For Applications (Ver 6.0)」を覗くと、 Stringsモジュールに BSTR _stdcall _B_str_Mid([in]BSTR String, ... VARIANT _stdcall _B_var_Mid([in]VARIANT *String, ... の二つが見つかるのだが、これがMid$とMidに対応しているのかなあ。
122 名前:デフォルトの名無しさん mailto:sage [2010/04/24(土) 12:00:21 ] みなさんのお知恵を、お貸しください。 下のようなif文を書いているのですが、まるで能が無くて、書いてて悲しいです。 nの中心付近を整数で求めたいんです。 下の例ではn=16ですが、実は250以上あったりして、これを全部手打ちで書いています。 何か規則正しいので、計算式で求められそうなのですが、うまく考えられません。 n=0, n=1は、if文で振り分けて、それ以上がなんとかならないかと。 If (n = 0) Then c = 0 ElseIf (n = 1) Then c = 0 ElseIf (n = 2) Then c = 2 ElseIf (n = 3) Then c = 2 ElseIf (n = 4) Then c = 3 ElseIf (n = 5) Then c = 3 ElseIf (n = 6) Then c = 4 ElseIf (n = 7) Then c = 4 ElseIf (n = 8) Then c = 5 ElseIf (n = 9) Then c = 5 ElseIf (n = 10) Then c = 6 ElseIf (n = 11) Then c = 6 ElseIf (n = 12) Then c = 7 ElseIf (n = 13) Then c = 7 ElseIf (n = 14) Then c = 8 ElseIf (n = 15) Then c = 8 板汚し、すみません。
123 名前:デフォルトの名無しさん mailto:sage [2010/04/24(土) 12:27:04 ] >>117 , 120, 121 Mattew Curland著 「Advanced Visual Basic6」より You should always use the $ versions of string function whenever they are available. If a $ version of a function is available, then its non-$ counterpart actually returns a Variant rather than a String. Although the VB compiler is smart enough to avoid duplicating the string when assigning the return value of a Variant function to a String variable, a significant amount of overhead and code generation is involved in using the non-$functions. If you think the extra character is too much trouble, one look at the generated code wil cure your laziness. Search for $ in the Object Browser to get a list of the $functions. ってことで、$版使ったほうがいいという話。 ただ、VBAなんて手抜いてナンボなんで、目くじらたててやる必要もないよなあ。
124 名前:デフォルトの名無しさん mailto:sage [2010/04/24(土) 12:38:09 ] >>122 c = WorksheetFunction.Ceiling(n / 2 + 0.1) かな?
125 名前:デフォルトの名無しさん mailto:sage [2010/04/24(土) 12:54:05 ] >>123 ×Mattew ○Matthew みんな買おうZE☆ www.amazon.co.jp/Advanced-Visual-Basic-Techniques-DevelopMentor/dp/0201707128/ref=sr_1_3?ie=UTF8&s=english-books&qid=1272081189&sr=8-3
126 名前:デフォルトの名無しさん mailto:sage [2010/04/24(土) 13:26:04 ] >>124 ありがとうございました。できました。 c = WorksheetFunction.Ceiling((n / 2 + 0.1),1) と、,1を追加しました。 大変助かりました。ありがとうございます。 Excelの命令が使えるこはビックリでしたが、 それよりも、VBAで切り上げ計算の演算子がないのがショックでした。 ありがとうございました。
127 名前:デフォルトの名無しさん mailto:sage [2010/04/24(土) 13:40:26 ] >>126 これでもいいんじゃね C = Int(n / 2) + 1 If C = 1 Then C = 0
128 名前:デフォルトの名無しさん [2010/04/24(土) 14:33:34 ] >>127 ありがとうございます。 そうですね。1の特殊性がなければ、上の行1行でいいですね。 ありがとうございます。 助かりました。
129 名前:デフォルトの名無しさん [2010/04/25(日) 02:38:39 ] 教えてください。 Excel VBAのプログラムを書いて、仕事の改善に使っています。 しかし、VBAのテキストエディタが使いにくいので、なんとかできないかと思っています。 VBAエディタで不満なのは、 ・自分の好きなレイアウトでソースが書けない 半角スペース、TABが無視されてしまい、ソースが見にくい ・TABが半角スペースになってしまう。 そこで、別途VB.netなどを買えば、VBA内蔵のエディタはoffになり、 VBのエディタ(TABも半角スペースによる位置揃えも可能)が使えるものでしょうか? ブレークポイントやステップ実行なども使いたいです。
130 名前:デフォルトの名無しさん mailto:sage [2010/04/25(日) 02:50:13 ] 無理
131 名前:デフォルトの名無しさん mailto:sage [2010/04/25(日) 02:54:30 ] >>129 そんなあなたにはExcelに埋め込むのは止めて RubyとかPythonでWIN32COM経由で Excel操作をすることを強くお奨めします
132 名前:デフォルトの名無しさん mailto:sage [2010/04/25(日) 04:19:39 ] >>129 マクロはときどき壊れるからなぁ
133 名前:デフォルトの名無しさん mailto:sage [2010/04/25(日) 11:01:07 ] >>129 あなたがVBAのエディタに合わせたほうが早いです。以上。 最初はみんな用意されたものに抵抗するんだよね。
134 名前:デフォルトの名無しさん mailto:sage [2010/04/25(日) 11:23:33 ] DLLで関数を公開することって出来ますか? DLLの読み込みはできるようなので ・スクリプトのDLLをロード ・セル操作などをスクリプトに公開 ・VBAからスクリプトをコール ・スクリプト内で計算 ・スクリプト内で公開されたセル操作などを使いExcelに出力 ・VBAに戻る といったことをやりたいのですが可能でしょうか?
135 名前:デフォルトの名無しさん mailto:sage [2010/04/25(日) 11:28:11 ] ScriptControlで直接Excelからスクリプト呼び出しするのが普通。
136 名前:デフォルトの名無しさん mailto:sage [2010/04/25(日) 19:20:36 ] もとからスクリプトサポートされてるんですねthxでした
137 名前:デフォルトの名無しさん mailto:sage [2010/04/25(日) 20:52:08 ] 微妙にVBAとは違うかもしれないのですがこちらで質問させていただきます ボタンを押して現在から2時間後を出してくれるように Cells(7, 3) = DateAdd("h", 8, Time) と作りセルの書式設定のユーザー定義で時間と分だけを表示するようh:mmに設定しました。 同じ日内で収まる場合なら正常に8時間後を出してくれるのですが、 日を跨いでしまうとなぜかユーザー定義が勝手にyyyy/m/d h:mmに変わってしまいます 宜しければ対処法をご教授くださいませ
138 名前:デフォルトの名無しさん mailto:sage [2010/04/25(日) 21:13:42 ] >>137 Cells(7, 3).Value = Format(DateAdd("h", 8, Time), "h:mm")
139 名前:デフォルトの名無しさん mailto:sage [2010/04/25(日) 21:17:27 ] >>138 無事表示してくれました 本当にありがとうございました
140 名前:デフォルトの名無しさん mailto:sage [2010/04/25(日) 23:06:48 ] 面接でVBAをアピールしたら「そんなもの下の下でしょ?(笑)という反応でした。 そんなに駄目っすか?だったらVBできますって言った方がまだ良い?
141 名前:デフォルトの名無しさん mailto:sage [2010/04/25(日) 23:11:28 ] VBAの良さって普通の人であればあるほど知らない。 ただ、他のことも出来てVBAもできる、ぐらいじゃないと意味がない。
142 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 00:15:50 ] 業種と職種による。 プログラマーならVBAは基礎知識のうちだからアピールポイントにはならない。
143 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 00:29:18 ] 基礎知識なのか excelとかそもそも使わないし C++一筋だったからVBA最近まで知らなかったよ
144 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 11:47:01 ] 事務員で「Excelできる人歓迎」みたいに書いてあったらVBA知ってるとかなり有利。 プログラマーならVBでもアウトだろうねえ。まあ会社にもよるだろうけど。
145 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 11:52:03 ] まあそうだけど事務員とプログラマーじゃ一応給料が結構違うし 事務員は月給12万くらいだけどプログラマーなら25万くらいあるし
146 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 12:27:51 ] 客先常駐のPGだと経歴書にEXCELとかVBAを一切書いてなくても 本業の待ち時間にVBAのちょっとしたものを作らされたりするよね。
147 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 12:50:51 ] プログラマーじゃないけど出身が社内SEなんで、社内SEなら業務ツール作りで VBA使えることって便利だし重要かなと思ってアピールしたんだけどなあ・・・。 他には一応Java、Cはやってるし、鯖で必須のPerl、Python、VBSあたりも普通に 使えるんだけど、小さな会社の社内SEなんで、鯖管理で使う後者はともかく、 前者はアピールしない方が良いかと思ったんだよな。 そもそもプログラマー志望じゃないし、自社開発も無いって話だったんで、 なんか無言でシコシコ書いてるのが好きなんだろ?って思われなくなかった っていうか。
148 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 17:18:19 ] それを面接で言えばよかったんじゃないの?なんで言わなかったの?
149 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 17:24:47 ] >>148 いやあ、面接官がIT系のコンサル野郎だったでやんす。 「システム導入こそすべて」みたいな奴で、もうどうにもならんかった。 開発も泥臭いとこはやってなさそうな感じの。 まあ、そんな奴がのさばってるって時点でアレなんですが。
150 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 17:55:07 ] マ板でやれや
151 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 18:18:12 ] Excel2007です 現在MicrosoftWebBrowserを利用して 指定セル(住所が書いてある)の地点のGoogleMapが表示されるようにしてあります。 ここでもう少し高度な操作をしたいために(ピン操作やルート案内など) GoogleMapsAPIを使用したいのですが ExcelVBAでGooglemapsAPI(javascript?)をGoogleMapに投げ込んで 結果をMicrosoftWebBrowserに返すにはどうすればいいのでしょうか?
152 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 18:21:43 ] >>149 気持ちは分かる
153 名前:デフォルトの名無しさん [2010/04/27(火) 11:34:07 ] filecopyで、ネットワーク上の共有フォルダにファイルをコピーさせたいのですが、 共有フォルダにアクセスできない場合のエラー処理が出来ずに困っております。 dirでいけると思ったのですが、アクセスできない場合、dirでもエラーになってしまいます。 何かよい方法はないでしょうか。
154 名前:デフォルトの名無しさん mailto:sage [2010/04/27(火) 12:28:48 ] On Error
155 名前:デフォルトの名無しさん mailto:sage [2010/04/27(火) 13:23:14 ] On Error でも良いんですが接続先のサーバーやPCが落ちてるときなど タイムアウトで実際にエラー処理に移るまでに時間が掛かりすぎて困ります このエラーが出るまでのタイムアウトを短くするにはどうすればよいでしょう?
156 名前:デフォルトの名無しさん mailto:sage [2010/04/27(火) 14:18:45 ] >>155 ファイル処理とかネットワーク処理は、ちゃんとやろうとすると意外と大変。 とくにVBAの関数だけではタイムアウトが制御できないから、 グローバル変数を使ったフラグとタイマーを使って時間内に終わったかどう自分で調べるような仕組みを ちまちま作るしかない。 フラグセット→タイマーセット→On Errorで強制終了回避→ファイル処理→すぐに終わったらタイマー解除 タイマーで強制的に抜けたらフラグクリア フラグがセットされたままだったら処理成功と判断する みたいな手順を、よく考えて作る。
157 名前:デフォルトの名無しさん [2010/04/28(水) 07:47:23 ] ,―ヽ_(((((_、― ,/ ノ ヽ ~\ / ノ IPA ヽ ~\ / ノ ヽ、 `ヽ | ノ / ̄\ / ̄~ヽ ヽ i | ノ | ノ \ | <●> <●> ( ) \ | | | i / | / ヽ レ i (●_●) / i、 ,-――-、 ・ / i、 <(EEEEE)> ∵/ どういたしまして i、 \ ./ / \ ーー ,ノ ,,.....イ.ヽヽ、ー-―一ノ゙-、. : | '; \_____ ノ.| ヽ i | \/゙(__)\,| i |
158 名前:デフォルトの名無しさん [2010/04/28(水) 16:43:11 ] ほんと糞言語だよな スタックないなんて 切り上げ切捨てのどっちかもないよね?
159 名前:デフォルトの名無しさん mailto:sage [2010/04/28(水) 17:05:55 ] スタックっつうか配列以外のデータ構造がまともに扱えない 切り上げ切捨てはどっちも出来る
160 名前:デフォルトの名無しさん mailto:sage [2010/04/28(水) 19:08:50 ] ↑ 実装できないwww
161 名前:デフォルトの名無しさん mailto:sage [2010/04/28(水) 21:23:58 ] 糞言語だと思うなら、使わなければいいじゃん
162 名前:デフォルトの名無しさん mailto:sage [2010/04/28(水) 22:24:00 ] ↑ vbaは言語じゃねーよwww
163 名前:デフォルトの名無しさん mailto:sage [2010/04/28(水) 22:44:06 ] 連休らしくなってまいりました 構ってちゃんの季節ですね
164 名前:デフォルトの名無しさん mailto:sage [2010/04/28(水) 22:46:53 ] ふぅ(´ω`)
165 名前:デフォルトの名無しさん mailto:sage [2010/04/28(水) 22:47:53 ] >>163 jukai-deep-ice.com/mono/nazo/kora.htm
166 名前:デフォルトの名無しさん mailto:sage [2010/04/29(木) 00:43:54 ] VBに足りない機能は 全部COMという万能倉庫から持ってくればいい。
167 名前:デフォルトの名無しさん mailto:sage [2010/04/29(木) 09:57:52 ] COM使うならExcel使う必要も無ければVBAを使う必要もない
168 名前:デフォルトの名無しさん mailto:sage [2010/04/29(木) 10:40:35 ] 意味がわからない。 そもそもVBAのグローバルコンテキスト自体がOfficeのCOM(IDispatch)だよな。 で、VB(A)以外でCOMを使うということだけど、 他言語で書いたらどれだけコーディングが面倒かご存知? まあ、WinOLE32とかいちいっちコーディングするのが面倒じゃなくて ブラウザも要らないなら、どうぞって感じなんだけど。 あと、Excelと密に連携取れないね。
169 名前:デフォルトの名無しさん mailto:sage [2010/04/29(木) 10:47:31 ] え?
170 名前:デフォルトの名無しさん mailto:sage [2010/04/29(木) 12:19:42 ] ExcelというアプリのUIを丸ごと再現するのは面倒だし意味ないし VBAだけではなかなかかゆいところに手が届かないし 事務員がExcelさわってる裏で事務作業の手伝いをさせるのがVBAの本来の使い方だから
171 名前:デフォルトの名無しさん mailto:sage [2010/04/29(木) 12:41:39 ] まあ、ここでExcelVBAを否定しても意味ないし
172 名前:デフォルトの名無しさん mailto:sage [2010/04/29(木) 13:47:12 ] たしかにRubyは面倒だな
173 名前:デフォルトの名無しさん mailto:sage [2010/04/29(木) 14:30:42 ] みなさん、普段はどんな言語を使ってるんですか? ・・・と聞こうと思ったけれど、ここは事務員のが多いって話でしたね。 ということは、VBScriptとかhtmlとかJavascriptとかのエンドユーザ向け言語ですか?
174 名前:デフォルトの名無しさん mailto:sage [2010/04/29(木) 14:37:53 ] またもや知ったかか
175 名前:デフォルトの名無しさん mailto:sage [2010/04/29(木) 14:42:01 ] ここで一番多いのは警備会社勤務 2ちゃんの質問スレで困ってる人を見つけたら助けるふりして雑談始めるのが仕事
176 名前:デフォルトの名無しさん mailto:sage [2010/04/29(木) 14:46:30 ] 事務員だけどVBAできます・・・・というか、IT屋のPGとして開発経験があれば、 プロジェクト規模とかステップ数でPGとしての職歴をアピールできるのかもしれないけど、 そうでない場合はアピールしようが無いというか、何をもってできるとするのかよくわからん。
177 名前:デフォルトの名無しさん mailto:sage [2010/04/29(木) 14:47:28 ] >>175 自宅警備会社というやつですか?
178 名前:デフォルトの名無しさん mailto:sage [2010/04/29(木) 15:01:55 ] >>177 自室です。
179 名前:デフォルトの名無しさん mailto:sage [2010/04/29(木) 16:14:27 ] >>173 ネットが繋がらない環境でJava使ってる。 VBAは各種ファイルの生成とか、XMLやらブックの解析とか。
180 名前:デフォルトの名無しさん mailto:sage [2010/04/29(木) 17:08:26 ] お話に花が咲いているところ すみません。教えてください。 office2000 XP SP3 です。 PCのCOMポートから、RS232Cで文字を受信して、Excelシートに表示しています。 while(1) if (受信文字=あり) then Cells(y, 1).Value = 受信文字 y = y + 1 endif wend という感じです。 いい感じに動作するのですが、シートの一番下の行まで行って、 次の行を書くときに、スクロールしたいのですが、 画面1行スクロールをするには、どのような記述をするのでしょうか。 宜しくお願いします。
181 名前:デフォルトの名無しさん mailto:sage [2010/04/29(木) 17:20:05 ] officetanaka.net/excel/vba/tips/tips79.htm
182 名前:デフォルトの名無しさん mailto:sage [2010/04/29(木) 18:08:21 ] Application.Calculation = xlCalculationManual で、関数の計算を止めた場合、 WorksheetFunction.Maxなどで関数をVBA内で使用(シートへの記載は無し)したら、 その計算結果を利用する判定時に誤作動したりするのですか? やはり直前でxlCalculationAutomaticに戻さなくてはいけないのですか?
183 名前:デフォルトの名無しさん mailto:sage [2010/04/29(木) 18:24:43 ] お話に花が咲いているところ 嫌味言うなら質問するな
184 名前:デフォルトの名無しさん mailto:sage [2010/04/29(木) 20:40:06 ] 気の利いたこと言おうとして失敗する人っているよね。 その一言が余計、という。 「へえ。君って○○大学出てるんだ」 「いやあどうしょうもないバカ大学でお恥ずかしい(謙遜のつもり)」 「……俺の息子はその大学を第一志望にして入学したんだよ(怒)」
185 名前:デフォルトの名無しさん mailto:sage [2010/04/29(木) 21:11:20 ] つ Ca
186 名前:180 mailto:sage [2010/04/29(木) 22:37:54 ] どうもありがとうございます。大変助かりました。 VBAの命令は、何でもあるんですね。ビックリしました。おかげさまで、なんとか作れそうな感じです。 以下のような感じで、現在の画面の最下行数を計算して temp_str = ActiveWindow.VisibleRange.Cells(1, 1).Address ' 現在の画面の左上セルの座標「$A$123」を文字で得る n = InStr(1, temp_str, "$") ' 左の$を見つける n = InStr(n + 1, temp_str, "$") ' 右の$を見つける y = Val(Mid$(temp_str, n + 1, Len(temp_str) - n)) + Windows(1).VisibleRange.Rows.Count ' "123"を取り出し、画面の縦の数を加算 この行数と、次回の書込予定セルのy位置と比較してスクロールしながら、書き込んでいくつもりです。 ここで、もう少し教えてください。 上記の最下行の計算ですが、VisibleRange.Cells(1, 1).Address の返値が文字で返ってくるので、めんどうな文字計算をしています。 これが、直接数字で返ってくる命令はないものでしょうか。 temp_str = ActiveWindow.VisibleRange.Cells(1, 1).Address というのは、現在のアクティブウインドウに対しての命令だと思います。 しかし別シートを開いている時でも、文字書込は決まったシートに バックグラウンドで実行したいのです。 シート指定をすればいいと思って a = Worksheets("AAA").VisibleRange.Cells(1, 1).Address などと やってみましたが、エラーだと言われました。 どのように書いたら、バックグラウンドで実行できるのでしょうか。 よろしくおねがいします。
187 名前:デフォルトの名無しさん mailto:sage [2010/04/30(金) 00:43:47 ] >>184 その会話で気の利いたことを言った(つもり)のはどっち?
188 名前:デフォルトの名無しさん mailto:sage [2010/04/30(金) 00:45:56 ] >>186 a = Worksheets("AAA").Range(hoge).Cells(1, 1).Address
189 名前:デフォルトの名無しさん mailto:sage [2010/04/30(金) 11:02:24 ] >>186 Visibleってのは「見えている」範囲のこと。ウィンドウを「切り替えたら見えるだろう」範囲ではない。 だから裏画面では意味がない。
190 名前:180 mailto:sage [2010/04/30(金) 19:02:09 ] 教えてくださいますでしょうか。 cells(1,1) と range("A1")という、2つの表現方法がありますが、 forで回すことを考えるとcells(1,1)のほうが都合が良いと思います。 しかし、range()も使いたいことが多いです。 そこで、この(1,1)という値を"A1"に変換するような関数はあるのでしょうか? 現在は、 dim array as string dim rng_str as string array = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" x = 1 y = 1 rng_str = mid$(arry, x, 1) & format(y) などとやっています。 何か1発でできる関数があると便利なのですが。
191 名前:デフォルトの名無しさん mailto:sage [2010/04/30(金) 19:13:14 ] >>190 アドレスとかじゃ本末転倒か
192 名前:デフォルトの名無しさん mailto:sage [2010/04/30(金) 19:23:11 ] そうですね。できれば、aaa = Conv(1,1)みたいな感じの物がVBAに備わっていることを期待しているのですが、 やはりむずかしそうでしょうか。 あと、もう1つよろしいでしょうか。 セルを選択するのと反対に、解除するのにはどのように書けばよろしいでしょうか。 選択は、セルの周囲の線が太く見えて、解除は、セルの周囲の線が太くなくなるということです。 選択 cells(1,1).select 解除 cells(1,1).Deselect と書いたら、叱られてしまいました。
193 名前:デフォルトの名無しさん mailto:sage [2010/04/30(金) 19:43:52 ] >>190 rng_str = Cells(Row, Col).Address(False, False) とりあえずこうするといいよ。
194 名前:デフォルトの名無しさん mailto:sage [2010/04/30(金) 21:17:14 ] >>187 >その会話で気の利いたことを言った(つもり)のはどっち? 二つ目の鍵カッコだよ。 この会話では、相手が不機嫌になった理由を教えてくれたから、 「ああ、俺余計なこと言ったな」と本人も気づくけど、 普通は腹の中で「この野郎」と思ってもわざわざそれを伝える人は少ない。 結果、本人はずっと「俺ってユニーク」などと思い込んだまま、 他人をイラつかせ続けることになる。 まあ、俺のことなんだが。
195 名前:デフォルトの名無しさん mailto:sage [2010/04/30(金) 21:59:14 ] >>192 行列の変換は Chr(64 + y) & x ただしZ列より右は表現できない AA列以降もサポートしたいなら自分で関数を作ってモジュール化すればいい セル選択の解除は不可能
196 名前:デフォルトの名無しさん [2010/04/30(金) 22:01:57 ] >>192 一般機能で出来ないことはvbaでも出来ない。 シートの中で必ず1セルは選択されているものだから、vbaでもどこかのセルは選択しないとあかん
197 名前:デフォルトの名無しさん mailto:sage [2010/04/30(金) 22:05:08 ] 何でもいいけどいい加減>>182 に答えてくれよ! さもないと自分で調べるぞ!!
198 名前:デフォルトの名無しさん mailto:sage [2010/04/30(金) 23:29:49 ] >>193 ありがとう。Row=1, Col=1 → A1 と出ました。ありがとう。 これで楽になりそうです。 >>195 , >>196 >セル選択の解除は不可能 >シートの中で必ず1セルは選択されているものだから、vbaでもどこかのセルは選択しないとあかん そうなのですね。ありがとうございました。 確かに、自分でExcel使うときは、どこす1箇所選択されています。 助かりました。ありがとうございました。
199 名前:デフォルトの名無しさん [2010/05/01(土) 15:32:28 ] >>197 調べろよw あと手動計算にしなくても再計算すればよろし マクロの記録でF9だ
200 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 17:57:32 ] ていうか再計算止めたからってWorksheetFunction の計算まで止まるわけないだろ。 むしろ発想自体新鮮w
201 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 19:46:16 ] / ̄(S)~\ < > / / ∧ ∧\ \< 嫌なら見るな! 嫌なら見るな! > \ \( ゚Д,゚ ) / /< > \⌒ ⌒ / ノ Y´`Y´`Y´`Y´`Y´`Y´`Y´`Y´`Y´`Yヽ )_人_ ノ / / ∧_∧ ■□ ( )) ( ; )■□  ̄ ̄ヽ γ⌒ ⌒ヽ  ̄ ̄ノ ノ  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄|
202 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 22:37:18 ] >>199-200 自分で調べるのが面倒だからこその質問スレだろうが! 情弱なめんな、ゆとりなめんな質問に答えてくれて本当にありがとうございました。
203 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 22:41:08 ] ↑ 冷静な自己分析だと思うぞ
204 名前:デフォルトの名無しさん mailto:sage [2010/05/02(日) 06:25:26 ] >>202 >自分で調べるのが面倒だからこその質問スレだろうが! 自分で調べてもどうしてもわからない時の質問スレだよ。 別に2chじゃなくとも、人に教えを請う時はそれが当たり前だと思うが。
205 名前:デフォルトの名無しさん mailto:sage [2010/05/02(日) 06:59:03 ] ↑ 2ちゃんの画一的なコメント 乙
206 名前:デフォルトの名無しさん mailto:sage [2010/05/02(日) 12:09:35 ] てか教えてGooに行けばいいんだよな
207 名前:デフォルトの名無しさん mailto:sage [2010/05/02(日) 12:47:44 ] -‐''''"´ ̄``ヽ、 ____ / _ ヽ //´ __,,>、 /  ̄ ̄ { /::/ / ̄:::::::::::::::\ l _ィニニア二二二ニヽ、j._ /::::l/::::::::::::::::::::::::::::::::l | 0Lj/-‐-レノ ノ_ヽ:::`ヽ l:::::::::::/l/lノノ/_イ:::::l レ:r、/ イ゚テ ピト`|::| l:::::::::/ rtテ、 .ィtq l::::::| l:lヘ '" ,j '"/ノ |::lヘ!j ´ ,j !;:::/ ヽヽ、 r‐-, /' レリー 、 ,...., lノ/ lヽ、  ̄ / `ヽ、lヽ 、  ̄ /´ _,r┴‐-`v´-‐j-、__ , -‐-、_r┴─'ー‐チト バルス!! / ̄/:.:.:.:| ̄ ̄`T ̄´|:.:.:.:l´ `ヽ / ヽ ̄`ー-‐'´`''''⌒ヽ / ,':.:.:.:.:.l l l:.:.:.l \ _r‐、-、-、r, 、 ', |:.:.:.:.:.:.! ! !:.:.l ,. -‐ゝ/// 〉 〉 〉 〉 〉 ! ', l:.:.:.:.:.:.l | l:.:.:l / 人〈〈〈〈 ' ' ' /っ l l l:.:.:.:.:.:.! ! l:.:.:.ト/ / ```´-ァ‐'''" / l 、__/:.:.:.:.:.:l | |:.:.:ヽヘ l // / _ ィノ /:.:.:.:.:.:.:! l |:.:.:.:.:l `ーヽ、_ノ´l、______/lニ二」 ____l:.:.:.:.:.:.:.| l |:.:.:.:.:! |_ ( ( ) )_〕| l l`ー‐‐'匸二l ̄ ̄l二フーイ /  ̄ `‐‐'´ ヽ |
208 名前:デフォルトの名無しさん [2010/05/02(日) 15:58:59 ] > 意思決定までコンピューターが出来るようになると、 > 人間自体が必要なくなる。 今でもほとんど「意思決定」に人間なんか要らないだろ。 1. 提案者「こんなアイディアがあります」 2. 決定者「費用対効果を数字で示せ」 2. 提案者「費用が○○円、利益が△△円を見込んでいます」 3. ○○ < △△か? true → 4.へ false → 5.へ 4. 決定者「そのアイディアを採用する」 → 6.へ 5. 決定者「そのアイディアを却下する」 → 6.へ 6. 決定者「次のアイディアはなんだ?」 結局のところ、「意思決定」(笑)とやらをやる人間はこんなロジックで動いているんだから、 人間なんかおく必要ない。Excelどころか、20年前のPCでBASICで組んでもいいレベル。 「費用対効果を出せ」「数字で示せ」「説明責任を果たせ」、って言うと非常に説得力が あるように見えるけど、実は判断基準のなすりつけなんだよね。
209 名前:デフォルトの名無しさん mailto:sage [2010/05/02(日) 17:06:47 ] >>208 んじゃそのプロセスをマクロで表現しなよ
210 名前:デフォルトの名無しさん [2010/05/02(日) 21:18:22 ] 質問させてください。 A列にx軸の値、B〜H列に7系列分のy軸の値が書いてある表で、 A,B列の値を選択してグラフを書かせるとA列をx軸、B列をy軸(系列1)としてくれるのですが、 A〜H列の値を選択してグラフを書かせるとx軸はblankで、A〜H列全てがy軸(系列1〜8)になってしまいます。 A列をx軸にして7系列分のグラフを書くにはどのように工夫したらよいでしょうか。
211 名前:デフォルトの名無しさん mailto:sage [2010/05/02(日) 21:54:14 ] あなたは知らないのですか?
212 名前:デフォルトの名無しさん mailto:sage [2010/05/03(月) 13:25:00 ] >>210 グラフの種類を散布図にして 元データの設定ウィンドウでY軸からA列を消して、X軸にA列を追加
213 名前:デフォルトの名無しさん mailto:sage [2010/05/04(火) 21:21:37 ] エクセルのサイズが500MBに届きそうなんだがこんなもんか?
214 名前:デフォルトの名無しさん [2010/05/04(火) 22:22:06 ] こんなもんかと聞かれても困るな w まぁ常識的に考えて肥大しすぎだとは思うが w
215 名前:デフォルトの名無しさん mailto:sage [2010/05/04(火) 22:53:39 ] peiyorin.cocolog-nifty.com/blog/2007/09/excel_1635.html これ以外にもシートをコピー→新しいブックの新しいシートに貼付け も効果があるらしい (シートタブからのシートのコピー はダメ)
216 名前:デフォルトの名無しさん mailto:sage [2010/05/04(火) 23:40:10 ] >>215 それやると、セルの幅はコピーされない(初期状態のまま?って言うの)んと違うかったっけ?
217 名前:デフォルトの名無しさん [2010/05/04(火) 23:50:05 ] >>216 ? 普通に書式も一緒にコピーできるけど?
218 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 00:33:09 ] ページ設定がコピーされないんでそのまま印刷するとおかしくなるだけ
219 名前:デフォルトの名無しさん [2010/05/05(水) 12:47:49 ] >>210 Excelは、変なお節介があり、ユーザーは動作の予想ができないので、 覚えにくいし、使いにくいですよね。 さて、具体的な方法は自分で考えてもらうとして、イメージを説明します。 グラフを作るとき、多くの場合は、希望するデータ範囲を囲って、 グラフボタンで進んで行って「グラフできたぁ」となるワケですが、 これは、EXcelのお節介な自動機能でグラフを作っているだけなので、 覚え始めのころは「このやり方が全てだ」と思い込んでしまいます。 僕もそうでした。しかし、この方法では、いつかは行き詰まります。 本来あるべき論としては、「この列のデータを、あの列のデータに対してグラフ化したい」だと思います。 このやり方が、本当のグラフ作成なのですが、 Excelのお節介で、私たちは、それが想像しにくいようになっています。 範囲を選択して、グラフボタンで、グラフウィザードを進んで行きますが、 そのウィザードの途中に、次のような画面が出てきます。 mcnc.hp.infoseek.co.jp/cgi-bin/img-box/img20100505123431.png この画面では、すでにEXcelが勝手に選んだ「系列1,系列2」というY軸の値が選ばれています。 まずこれを削除します。そして、その右側の「Xの値」「Yの値」の所の文字も消して、 その枠の右側の三角?っぽいボタンを押します。 すると、ウィザードを開いているのに、なぜかシートに触れてしまいますので 自分の好きなY軸の範囲を選択します。同様にして、Xの値も範囲を指定します。 これで、EXcelのお節介なく、自分の好きな軸に、自分の好きな範囲を指定してグラフが作れます。 この方法は、既に出来上がっているグラフに対しても可能でなので、 自分で調べて見てください。 僕の思うグラフの作成は、「これをXに、これをYに」という指定をするのが正しい方法、 というかユーザーがイメージできる作成方法だと思っています。 Excelやワードのお節介が減ることを期待したいです。
220 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 13:32:18 ] VBAの話をしろボケ
221 名前:デフォルトの名無しさん mailto:sage [2010/05/06(木) 00:23:24 ] >>219 なかなか面白い話しやけど、確かにスレ違い。
222 名前:デフォルトの名無しさん mailto:sage [2010/05/08(土) 17:44:55 ] 配列に数が入っている状態で, 平均値などを計算したい場合, 一度,シートに書き出してエクセルのaverage関数を使うしかないのでしょうか?
223 名前:デフォルトの名無しさん mailto:sage [2010/05/08(土) 17:47:19 ] いいえ
224 名前:222 mailto:sage [2010/05/08(土) 17:55:03 ] >>223 すいません 自分で関数を定義したくはないのですが そのようなサブルーチンがvbaにも実装されているのでしょうか?
225 名前:デフォルトの名無しさん mailto:sage [2010/05/08(土) 18:11:12 ] WorksheetFunction.Averageって配列を受け付けられなかったっけ?
226 名前:デフォルトの名無しさん mailto:sage [2010/05/08(土) 18:49:16 ] 配列できるね。
227 名前:デフォルトの名無しさん mailto:sage [2010/05/08(土) 19:13:10 ] セルにAddCommentで複数行のコメントを入れようとしてます。 vbNewLineで改行していれようとすると5行までしか入りません。 無限にいれれるようにするにはどうしたらいいでしょうか?
228 名前:222 mailto:sage [2010/05/08(土) 19:13:18 ] 例えば, 配列 a[100] を定義したとして,a[10]からa[i]までの平均値をだしたいのですが excelの関数で大丈夫ですか・
229 名前:デフォルトの名無しさん mailto:sage [2010/05/08(土) 19:24:00 ] >>228 じゃあ、10〜iまで回せばいいじゃん
230 名前:222 mailto:sage [2010/05/08(土) 19:49:42 ] >>229 可変長の部分をa_temp というdouble型の配列を作成,そこに格納し ave = WorksheetFunction.Average(a_temp) としても 0 しか返ってきません. 何か間違っていますでしょうか?
231 名前:デフォルトの名無しさん mailto:sage [2010/05/08(土) 19:50:24 ] 平均ぐらい自分で出せよカス
232 名前:222 mailto:sage [2010/05/08(土) 20:13:58 ] >>231 枯れたサブルーチンがあるなら自分で書くよりミスは圧倒的に減るはずですよね. なんとかなりませんか
233 名前:デフォルトの名無しさん mailto:sage [2010/05/08(土) 20:15:05 ] この程度でミスしてる時点で他のあらゆるコードが信用出来ない。おまえさんはもう諦めろ
234 名前:222 mailto:sage [2010/05/08(土) 20:19:47 ] >>233 vbaは何分初めてなもんで よろしくお願いいたします
235 名前:デフォルトの名無しさん mailto:sage [2010/05/08(土) 20:23:10 ] 何事もほどほどにな
236 名前:デフォルトの名無しさん mailto:sage [2010/05/08(土) 20:45:32 ] >>227 気のせいでした
237 名前:デフォルトの名無しさん mailto:sage [2010/05/09(日) 01:21:50 ] >>234 とりあえず、作ったプログラムを丸ごと貼り付けて
238 名前:222 mailto:sage [2010/05/09(日) 09:59:16 ] お騒がせしました. 求めた平均値を入れる変数の型をlong型にしていたため, 常に0となっておりました. double型に変えると無事動作しました ありがとうございました
239 名前:デフォルトの名無しさん mailto:sage [2010/05/09(日) 15:56:22 ] あるブックでマクロ実行中、他のブックを操作する方法ないですか?
240 名前:デフォルトの名無しさん mailto:sage [2010/05/09(日) 17:08:43 ] >>239 もう少し詳しく書かなきゃわからんよ 他のブックを操作するとは例えばどんな事? また、あるブックでマクロ実行中て書いてるけど どんな処理をしている時を想定しているの
241 名前:デフォルトの名無しさん mailto:sage [2010/05/09(日) 19:07:08 ] >>240 イメージとしてはExcelの二重起動でしょうか マクロの実行中ってほかのエクセルの編集作業が全くできないと思うんですが、それをできるようにしたいです。
242 名前:デフォルトの名無しさん mailto:sage [2010/05/09(日) 19:16:36 ] そのまんま、Excelを2重起動すればいい。
243 名前:デフォルトの名無しさん mailto:sage [2010/05/09(日) 19:25:38 ] >>239 取りあえずDoEventsでも入れてみれば
244 名前:デフォルトの名無しさん mailto:sage [2010/05/09(日) 19:48:48 ] >>242-243 質問が悪かったです。ちょっと出直してきます
245 名前:デフォルトの名無しさん mailto:sage [2010/05/09(日) 20:11:42 ] 自己解決
246 名前:デフォルトの名無しさん mailto:sage [2010/05/10(月) 08:04:51 ] phpのmysql_connect()関数が使えません。 環境は、 windows7 Apache2.2 PHP5.1 mysql server 5.1 です。 普通のphpファイルは開けるのですが、 mysql_connect()を使うとブラウザでページを表示できなくなります。 なぜでしょうか?
247 名前:デフォルトの名無しさん mailto:sage [2010/05/10(月) 08:07:15 ] すいません。誤爆しました
248 名前:デフォルトの名無しさん mailto:sage [2010/05/10(月) 23:22:47 ] 図がないシートなのに、保存しようとすると 「図が大きすぎます」エラーが出るのは どんな理由が考えられますか? VBAがたくさん使ってあるシートです。 でも、図の類は何もありません。
249 名前:デフォルトの名無しさん [2010/05/12(水) 04:09:28 ] スタックが小さくて、まともな業務ソフトつくれないよ。 マイクロソフトは、あいかわらず、いつまでもユーザー泣かせのことやってる。
250 名前:デフォルトの名無しさん [2010/05/12(水) 04:12:14 ] これだけメモリー搭載が増えてる時代なのになんでスタックを大きくしないのか 不思議でしようがないいよ。 故意にユーザーを苦労させ、エラー出るように設計してるとしか思えない。
251 名前:デフォルトの名無しさん [2010/05/12(水) 04:14:37 ] なんか、日本語版だけ故意にスタック小さくしてるような感じする。
252 名前:デフォルトの名無しさん mailto:sage [2010/05/12(水) 07:36:24 ] スタックが増えても、落ちるまでの時間が多少伸びるだけじゃねえのw
253 名前:デフォルトの名無しさん mailto:sage [2010/05/12(水) 12:40:58 ] VCのスタックサイズのデフォルトは1MBなんだが、VBAではどのくらいなんだ?
254 名前:デフォルトの名無しさん mailto:sage [2010/05/12(水) 13:04:22 ] 条件式について質問です。 処理対象データ ↓ A B C D 1 あ い う 1 あ い う 2 あ い う 3 あ い う 3 あ い う 4 あ い う 4 あ い う 4 あ い う というデータがあるとします。 A列の値が同じである間、同じSheetにデータを出力できるようにし A列の値が異なる場合になったならば、別シートに出力変換したいんだけども 何かアドバイスを貰えませんか。
255 名前:デフォルトの名無しさん mailto:sage [2010/05/12(水) 13:11:08 ] >>254 Aを上から見ていって、 前の値と比較すればいいでしょ。 Set procRange = [A1] Set outputSheet = While procRange <> "" If procRange.Offset(-1) <> procRange Then Set procRange = procRange.Offset(1) Wend
256 名前:デフォルトの名無しさん mailto:sage [2010/05/12(水) 13:13:32 ] 途中で投稿されちゃった 動かせる環境ないから適当に直せ Dim procRange As Range Dim outputSheet As Worksheet Set procRange = [A1] While procRange <> "" If procRange.Row = 1 Then Set outputSheet = Worksheets.Add ElseIf procRange.Offset(-1) <> procRange Then Set outputSheet = Worksheets.Add End If ' なんか適当な処理 Set procRange = procRange.Offset(1) Wend
257 名前:デフォルトの名無しさん mailto:sage [2010/05/12(水) 13:21:31 ] >>256 返答ありがとうございます。 高度な文面なので検索してちょっと理解深めます。 Offset〜〜に解決の糸口を見つけられそうなので イジイジしてきます。ありがとおおおおおおおお
258 名前:デフォルトの名無しさん mailto:sage [2010/05/12(水) 18:19:08 ] 教えてください。 質問の概要 ワークシートの変更を禁止したいです。 説明 ・シート内にあるボタンを押すと計算が始まります。 ・その計算は、そのシート内のセル内容を読込んで計算するので、シートを変更されると、困ります。 ・そこで、計算している間は、シート変更を禁止させたいです。 計算中にシートタブがクリックされたら、このような動きにしたいです。 メッセージボックスを表示して「今はダメよ」と表示する もしメッセージボックスを表示することで、計算が狂ってしまうなどの問題があるのなら、 最低でも、シート変更を無視、無反応にし、計算を安全にしたいです。 どのようにすれば良いでしょうか? 宜しくお願いします。
259 名前:デフォルトの名無しさん mailto:sage [2010/05/12(水) 18:21:51 ] Application.ScreenUpdateing = Falseじゃだめなの?
260 名前:デフォルトの名無しさん mailto:sage [2010/05/12(水) 20:54:35 ] >>259 ありがとうございました。Application.ScreenUpdating = Falseにより、期待通りの動きが出来ました。 すばらしいです。 ただ、不思議なことがあります。教えていただけませんでしょうか。 以下のように、計算前にボタンの色を変えて、 計算後にボタンの色を戻すようにしているのですが、その色の変化が、うまく動きません。 従来、ScreenUpdatingを入れない時は、ボタン色が正しく変化します。 Button1.BackColor = QBColor(赤) ' 色を変える Call KEISAN Button1.BackColor = QBColor(白) ' 色を戻す 次のように、ScreenUpdatingを入れると、 Button1.BackColor = QBColor(赤) Application.ScreenUpdating = False Call KEISAN Application.ScreenUpdating = true Button1.BackColor = QBColor(白) 白のまま計算を開始して、計算が終わると白→赤→白と、まとめて変化します。 ScreenUpdatingを、' にすると、正しく色が変化します。(再現性があります) どうしてこんなことが起こるのでしょうか? 宜しくお願い致します。
261 名前:デフォルトの名無しさん mailto:sage [2010/05/12(水) 21:24:18 ] >>260 ボタンの背景色の変更と、その色で画面が更新されるタイミングには実際にはブランクがある為。 VBAマクロ実行中も一定の間隔で画面の更新処理は走るが、 ScreenUpdatingがFalseの時はその処理が妨げられる。 ScreenUpdatingをTrueに戻すと、とりあえず画面全体を更新しなおすので、 後述の処理だとまとめて変化したように見える。
262 名前:デフォルトの名無しさん mailto:sage [2010/05/12(水) 23:44:46 ] できました
263 名前:デフォルトの名無しさん mailto:sage [2010/05/13(木) 01:00:39 ] Button1.BackColor = QBColor(赤) Call DoEvent Application.ScreenUpdating = False Call KEISAN Application.ScreenUpdating = true Button1.BackColor = QBColor(白) だったかな
264 名前:デフォルトの名無しさん mailto:sage [2010/05/13(木) 01:03:13 ] 全然違った スマソ orz Button1.BackColor = QBColor(赤) DoEvents Application.ScreenUpdating = False Call KEISAN Application.ScreenUpdating = true Button1.BackColor = QBColor(白)
265 名前:デフォルトの名無しさん mailto:sage [2010/05/13(木) 01:07:09 ] 自作関数をセル上に入力すると、ポップアップで引数の説明文を表示させるようにするにはどうしたらいいのでしょうか。 例えばセル上に "=IF(" まで入力すると IF(論理式,[真の場合],[偽の場合]) と、表示されますが、 このポップアップ表示されるやつを自作関数でも表示させたいのです。 ご教示よろしくお願いします
266 名前:デフォルトの名無しさん mailto:sage [2010/05/13(木) 02:50:22 ] 自己解決
267 名前:デフォルトの名無しさん mailto:sage [2010/05/13(木) 17:21:52 ] >>264 ありがとうございました。なんとか出来ました。 僕のExcel (office2000)だけなのかわかりませんが、教えてもらった方法だと、症状が改善しませんでした。 Button1.BackColor = QBColor(赤) DoEvents Application.ScreenUpdating = False Call KEISAN Application.ScreenUpdating = true Button1.BackColor = QBColor(白) 動作結果 ボタンon→KEISAN→赤→白のままなんです。 Button1.BackColor = QBColor(赤) Call KEISAN Button1.BackColor = QBColor(白) Sub KEISAN(){ DoEvents Application.ScreenUpdating = False : : Application.ScreenUpdating = true End Sub のようにKEISANの中に置くと 動作は、 ボタンon→赤→KEISAN→白となります。 でも、解決できて良かったです。どうもありがとう。感謝します。 // ------------------------------------------------------------- // 別件ですが、VBAのエディタについて教えてください。 行頭でTABキーを打つと、カーソルは4文字毎に飛んでいきます。しかし、BackSpaceキーを1回押しても、1文字分しか戻りません。 というか、TABが4スペースになってるみたいです。これを、TABのままにして、BSキー押したときに、1TAB分戻るようには出来ないでしょうか? ところが、何かの都合?でBSキーで1TAB分戻ることもあります。もう、わけがわかりません。半分怒っています。 これは、どのような時に起こるのでしょうか? 通常のエディタのように動かないので、使いにくくて困っています。すみません。ご存じでしたら、どなたか教えてください。
268 名前:デフォルトの名無しさん mailto:sage [2010/05/13(木) 17:31:47 ] つメモ帳
269 名前:デフォルトの名無しさん mailto:sage [2010/05/13(木) 17:38:07 ] >>267 一般的には、TABで送ったものはSHIFT+TABで戻すんじゃね?
270 名前:デフォルトの名無しさん mailto:sage [2010/05/13(木) 17:50:10 ] >>269 ありがとうございます。Shift+TABを、Excelでやってみました。 VBAエディタでは、確かに出来ました。左に1TABずつ戻ります。初めて知りました。 ところが、秀丸では、Shift+TABは、エラー。 メモ帳では、Shift無視で右にTABしていきました。 text editorは、space4個はspace4個、tabはtab、として置いて欲しいと思っています。 space4個打ったところでは、BS1回で、1spaceが消えればいいし、 tabを打った所では、BS1回でtab1個が消えればいい、というかそのほうが自然だと思うのです。 僕の価値観だけでしょうか。 でも、>>269 に Shift+TABを教えてもらったので、今度からはストレスがぐっと減りそうです。 どうもありがとうございました。
271 名前:265 mailto:sage [2010/05/13(木) 18:11:23 ] >>266 は私のレスではありません。 引き続きお願いします。
272 名前:265 mailto:sage [2010/05/13(木) 19:04:04 ] >>271 は私のレスではありません。 引き続きお願いします。
273 名前:デフォルトの名無しさん mailto:sage [2010/05/13(木) 20:59:53 ] >>270 Visual StudioやEclipseといった開発環境は大抵Shift+Tabで戻るよ 秀丸の場合、1文字以上選択状態にしてShift+Tabで戻る(サクラエディタも同様) Tabキーでスペース2個とか4個とかが入力されるようにするのは スペース派(ソースコード中にタブ文字を一切使わない)には普通のこと。 タブ文字は見る方の環境によって幅が変わってしまうので、それを嫌っている。 ただVBAは専用エディタでしか見ないだろうし、 そもそも設定変更できないのがひどいのは事実
274 名前:デフォルトの名無しさん mailto:sage [2010/05/13(木) 21:05:50 ] あのエディタでリドゥのつもりでCtrl+Yを押すと悲惨な目に遭う
275 名前:デフォルトの名無しさん mailto:sage [2010/05/13(木) 21:58:59 ] いやならバインディングかえればいいのに 馬鹿なの?死ねの?
276 名前:デフォルトの名無しさん mailto:sage [2010/05/13(木) 22:06:50 ] 死ねの?
277 名前:デフォルトの名無しさん mailto:sage [2010/05/13(木) 22:46:05 ] 死ぬの?─┬――死ぬよ(死ぬ派) . │ . └――死なないよ(死なない派)
278 名前:デフォルトの名無しさん mailto:sage [2010/05/14(金) 07:41:41 ] 時刻の条件式について質問です。 00:15 00:30 00:45 〜〜略〜〜 03:00 みたいな時間がず〜〜〜〜と続くと想定して これを開始の00:15から03:00までの間ループさせたいんだけど 時間と分を別々に分けて15分ずつ足して行く方法しかないですかね?
279 名前:デフォルトの名無しさん mailto:sage [2010/05/14(金) 08:22:28 ] >>278 そうじゃないの つまり0時1時2時3時のステップと15分30分45分00分のステップを入れ子でループするんでしょ
280 名前:デフォルトの名無しさん mailto:sage [2010/05/14(金) 08:25:59 ] >>278 ですけども 分けて計算すると変数多くなってしまうと思っての質問だったのですが 分けて計算するとしたら、どういう感じのループ条件式になりますでしょうか。 重ね重ねすいません。
281 名前:デフォルトの名無しさん mailto:sage [2010/05/14(金) 08:27:43 ] >>279 おおお!!納得です。 ちょっと考えてきます、ありがとございました!
282 名前:デフォルトの名無しさん mailto:sage [2010/05/14(金) 12:11:45 ] エンバグの元なのに
283 名前:デフォルトの名無しさん mailto:sage [2010/05/14(金) 12:40:02 ] 配列のデータで一意のデータを出力させたいのですが、 以下の配列データが複数あるとします。 A(0) = 1 A(0) = 2 A(0) = 3 A(0) = 4 A(0) = 3 A(0) = 3 A(0) = 10 A(0) = 2 出力結果は A(0) = 1 A(0) = 2 A(0) = 3 A(0) = 4 A(0) = 10 こんな感じにしたいのですが、どんな感じにすればいいでしょうか
284 名前:デフォルトの名無しさん mailto:sage [2010/05/14(金) 12:42:08 ] >>283 配列の全要素は0ではないです、すいません。 A(1) = 1 A(2) = 2 A(3) = 3 A(4) = 4 A(5) = 3
285 名前:デフォルトの名無しさん mailto:sage [2010/05/14(金) 13:00:10 ] >>283 配列をソートして前と違うものを取り出せばよい。 あるいは最小値と最大値が極端に離れてなければBoolean型の配列を Redim FLG(最小値 To 最大値) As Boolean のように用意して、ループを回しながらフラッグをたて、フラッグが 立っているものを取り出してもよい。 数値にDictionaryを使うやつはアホ。
286 名前:デフォルトの名無しさん mailto:sage [2010/05/14(金) 13:05:51 ] すまん、上はフラッグが立ってないときだけ取り出すの間違いね。
287 名前:デフォルトの名無しさん mailto:sage [2010/05/14(金) 13:11:59 ] Dictionaryを使えばいい
288 名前:デフォルトの名無しさん mailto:sage [2010/05/14(金) 13:13:21 ] >>285 配列のソートって出来るのですね。 フラッグはちょっと難しそうでしたので配列ソートの方を参考にさせて頂きます。 調べてる時Dictionaryというのも頻繁に出てきたのでこれも調べてみます。 レスありがとございました!
289 名前:デフォルトの名無しさん mailto:sage [2010/05/14(金) 13:18:27 ] 馬鹿の一つ覚えのDictionaryがやっぱり出てきたかw
290 名前:デフォルトの名無しさん mailto:sage [2010/05/14(金) 13:25:01 ] Dictionaryの何がいけないか2行で説明してくれ
291 名前:デフォルトの名無しさん mailto:sage [2010/05/14(金) 13:25:29 ] え?Dictionaryダメなの?
292 名前:デフォルトの名無しさん mailto:sage [2010/05/14(金) 13:31:43 ] Dictionaryダメっていうやつはカルト宗教にはまりやすいタイプ
293 名前:デフォルトの名無しさん mailto:sage [2010/05/14(金) 13:32:51 ] ダメって書くなら根拠書いて欲しい。 言いっぱなしは迷惑。
294 名前:デフォルトの名無しさん mailto:sage [2010/05/14(金) 13:35:29 ] うるせーDictionaryっていっぱい連レスするんじゃねーよ
295 名前:デフォルトの名無しさん mailto:sage [2010/05/14(金) 13:37:59 ] >>290 二行も必要ないなw アホだからだよ。 無理やり二行で書くと 何で単純な整数にハッシュが必要なんだってことだな。 ハッシュなんて文字列に使うものだぞ。
296 名前:デフォルトの名無しさん mailto:sage [2010/05/14(金) 13:48:13 ] そもそもDictionaryがどういう実装しているか知らないが、 (少なくともCollectionよりは効率がいいはずだが) 整数値は整数値をそのままハッシュ値にすればいいでしょ。 ていうか、そんなんでDictionary否定してたの?
297 名前:デフォルトの名無しさん mailto:sage [2010/05/14(金) 13:56:03 ] ダミだこりゃ。 お手上げだね。
298 名前:デフォルトの名無しさん mailto:sage [2010/05/14(金) 14:05:17 ] なるばくDictionaryを多く使ったほうがいいよ
299 名前:デフォルトの名無しさん mailto:sage [2010/05/14(金) 14:08:51 ] 何にでもDictionaryの人って大和の吊るし柿みたいに味のあるコードを書く人多いよね。
300 名前:デフォルトの名無しさん mailto:sage [2010/05/14(金) 14:19:11 ] 正直Dictionary回避してまで手に入れたいものって何?
301 名前:デフォルトの名無しさん mailto:sage [2010/05/14(金) 14:26:17 ] インタプリタでソートしたりなんかしたりして遅くなるより ネイティブなDictionaryでやったほうがいいね
302 名前:デフォルトの名無しさん mailto:sage [2010/05/14(金) 14:35:57 ] ほんとアホばっかだなw >>299 そういう皮肉は今の人には通じないって。
303 名前:デフォルトの名無しさん mailto:sage [2010/05/14(金) 14:48:09 ] 場合によって使い分けるのが一番
304 名前:デフォルトの名無しさん mailto:sage [2010/05/14(金) 14:58:02 ] VBA関係ないし
305 名前:デフォルトの名無しさん mailto:sage [2010/05/14(金) 16:11:00 ] Rangeオブジェクトについてなんですけども、 複数モジュールがある中で共有して扱わないとエラー出てしまったので subとかが書かれてるよりも一番上(グローバル宣言?)にしたらエラーが出ませんでした。 これって外道ですかね?
306 名前:デフォルトの名無しさん mailto:sage [2010/05/14(金) 16:16:12 ] 何の話ざんしょ。もっとわかりやすくしてね。
307 名前:デフォルトの名無しさん mailto:sage [2010/05/14(金) 16:35:00 ] Rangeオブジェクトの変数についてですけども、Moduleが1〜3あったとします。 Module1 Module2 dim aaRange as Range call ユーザ定義関数(aaRange) Module3 ユーザ定義関数(aaRange)記載 上記のようにModule2でRangeオブジェクトを宣言し、ユーザ定義の引数で貰ってるとします。 頻繁にユーザ定義関数を実行するのですが、aaRangeの値を常に保持していたくてグローバル宣言(呼び方あってるのかな) してしまったと言う訳ですが!!! 糞設計でしょうか!!
308 名前:デフォルトの名無しさん mailto:sage [2010/05/14(金) 16:37:23 ] うんkです
309 名前:デフォルトの名無しさん mailto:sage [2010/05/14(金) 16:45:36 ] デナオシテキマス
310 名前:デフォルトの名無しさん mailto:sage [2010/05/15(土) 14:27:47 ] 16進数苦手。 イミディエイトウィンドウで ?hex(50000) だと C350 と出ます。 でも ?&hC350 だと -15536 と出ます。 何で?? 50000に戻したいのに・・・。 因みに ?-15536=50000 False ?hex(-15536)=hex(50000) True と出ます・・・。
311 名前:デフォルトの名無しさん mailto:sage [2010/05/15(土) 15:50:46 ] >>310 50000はIntegerの範囲に収まってないのにIntegerに変換しようとしてそうなる ?&hc350& でLongに変換すればちゃんと50000になる 最後の&はLongを表す文字な
312 名前:デフォルトの名無しさん mailto:sage [2010/05/17(月) 08:04:24 ] エクセルVBA開発のコーディングルール作ってるんだけど、意見聞かせて欲しい ちなみに、会社で後任に引き継ぐのを想定してるだけなんで、ガチガチにする必要なし みなさん設計する時どんなことに気をつけてます?
313 名前:デフォルトの名無しさん mailto:sage [2010/05/17(月) 09:18:42 ] 元々緩やかな下降線にはあったけど、人が減った事によって それまでは人混みに隠れていた工作員の存在が目立つようになったのが致命傷だったな 工作員の誘導を嫌って参加者が減り、他所からの工作員を排除しようとして規制をするから 参加機会が奪われて更に参加者が減るという負のスパイラルにおちいってる
314 名前:デフォルトの名無しさん mailto:sage [2010/05/17(月) 09:32:43 ] >>312 関数の引数は基本的にByValにするとかかな。 速度的にはByRefが望ましいんだけど。(特に文字列) Option Explicit強制とか、 空文字の代わりにvbNull使うとか、 $バージョン関数があるなら$バージョン関数使うとか、 改行文字の種類も揃えたほうがいいかも。 変数名のつけ方をシステムハンガリアンにするなら 統一したほうがいいね。
315 名前:デフォルトの名無しさん mailto:sage [2010/05/17(月) 12:41:57 ] Option Explicit以外、何一つ共感できない
316 名前:デフォルトの名無しさん mailto:sage [2010/05/17(月) 12:45:34 ] >>315 俺もそう思った
317 名前:デフォルトの名無しさん mailto:sage [2010/05/17(月) 12:47:19 ] なるほど 空白よりvbNullで統一したほうがいいな そういやOption Explibt忘れてたわ……入れとこう 命名規則はアプリケーションハンガリアンにする予定 触る人のレベルなんかわからないし、プロジェクトごとの理解をまず深めて貰わないといけない 頭文字のみ大文字、単語ごとにアンダースコア、2バイト禁止 変数・プロジェクト名が長くなるから、頭文字大文字が必須になる 自分で慣れてないから書き換える手間が半端ないっていう
318 名前:デフォルトの名無しさん mailto:sage [2010/05/17(月) 13:32:40 ] ・VBA禁止
319 名前:314 mailto:sage [2010/05/17(月) 13:35:57 ] >>315-316 共感するしないじゃなくて、具体的な案とか意見書いてくれ。 問題点があるならそれもよろしく。
320 名前:デフォルトの名無しさん mailto:sage [2010/05/17(月) 13:36:32 ] なぜそこまでしないといけないんだ
321 名前:デフォルトの名無しさん mailto:sage [2010/05/17(月) 13:37:57 ] 共感できないというなら理由ぐらい示せってだけだよ。
322 名前:デフォルトの名無しさん mailto:sage [2010/05/17(月) 13:43:49 ] めんどくさい
323 名前:デフォルトの名無しさん mailto:sage [2010/05/17(月) 13:46:18 ] 役に立たないなあ…
324 名前:デフォルトの名無しさん mailto:sage [2010/05/17(月) 13:51:31 ] 別に役に立ちたくないし
325 名前:デフォルトの名無しさん mailto:sage [2010/05/17(月) 14:00:39 ] >>315 俺もそう思った
326 名前:デフォルトの名無しさん mailto:sage [2010/05/17(月) 15:47:24 ] >>315 私もそう思うわ
327 名前:デフォルトの名無しさん mailto:sage [2010/05/17(月) 18:47:47 ] 共感とか意見とか議論とか以前にルールに作るのになんかない? って質問に答えてるのが>>314 だけじゃねえか 人のレスにいちゃもんつけるくらいしか出来ねえのか三流プログラマども 俺も>>315 には共感するけどそれはそれとして
328 名前:デフォルトの名無しさん mailto:sage [2010/05/17(月) 20:03:33 ] 関数の前には必ず説明のコメントを書く。書式も統一して、検索しやすいようにする 何より 手段と目的が逆転しないように気をつける
329 名前:デフォルトの名無しさん mailto:sage [2010/05/17(月) 20:18:20 ] 変数名は大文字で始める?小文字で始める? システムハンガリアンとかいうのは小文字だよね?
330 名前:デフォルトの名無しさん mailto:sage [2010/05/17(月) 21:42:31 ] Dim hoge$ と書くか Dim hoge As Stringと書くか
331 名前:デフォルトの名無しさん mailto:sage [2010/05/17(月) 22:47:17 ] 普通は小文字で
332 名前:デフォルトの名無しさん mailto:sage [2010/05/17(月) 23:08:56 ] 大文字にしておくと、小文字で打ったときに自動訂正してくれる だから大文字含めた変数名にしておくと、タイプミスが少なくなる
333 名前:デフォルトの名無しさん mailto:sage [2010/05/17(月) 23:43:45 ] 小文字の変数名にすると、ある型の名前を変数名にしてしまったときに 型が勝手に小文字になって困ってしまう 例えば、rangeとかdateとかを変数名にすると、全体的に型のRangeが 勝手にrangeに変わってしまう なんとかならないんだろうか
334 名前:デフォルトの名無しさん mailto:sage [2010/05/18(火) 00:04:23 ] VBAはシンボルを大文字小文字で区別しないんだから気にしなけりゃいいんじゃね あとはかぶらない名前にするか
335 名前:デフォルトの名無しさん mailto:sage [2010/05/18(火) 05:45:44 ] >>332 Option Explicitとか宣言の強制使え >>333 システムで宣言済みの名前を使うな
336 名前:デフォルトの名無しさん mailto:sage [2010/05/18(火) 07:56:22 ] 予約後を変数で使おうとする気持ちがよくわからない。
337 名前:デフォルトの名無しさん mailto:sage [2010/05/18(火) 08:04:48 ] 特定の型の名前を予約語とは言わない。
338 名前:デフォルトの名無しさん mailto:sage [2010/05/18(火) 08:26:09 ] 特定の型の名前を(ry
339 名前:デフォルトの名無しさん mailto:sage [2010/05/18(火) 08:41:53 ] Javaの場合なんだが、Eclipseとかの代表的なIDEは、変数の名前補完のデフォルトが クラスの小文字名だよ
340 名前:デフォルトの名無しさん mailto:sage [2010/05/18(火) 12:23:32 ] その人の行動は「プライバシー問題に関して無頓着」で一貫しているように 見えるので理解してもらうのは難しいと思う。新しい概念を習得してもらうには 少々歳を取りすぎている。掲示板にもらった手紙の全文を掲載した時点で 気が付くべきだったのかも。 「プライバシー問題に関して無頓着」な人は親しくない相手にも平気で年齢や 職業を尋ねる傾向があるようなので注意したほうがいいです。
341 名前:デフォルトの名無しさん mailto:sage [2010/05/18(火) 12:24:23 ] >>335 デバッグするまでスペルミスのリスク抱えてろってのか? タイプミスじゃなくて思い違いだったりすると、毎回変数名間違うことになる 一ヵ所ならまだしもデバッグ時に複数箇所とか煩わしすぎ 頻度の少ないコードとか気付かなかったり、確実にデバッグ出来るってわけでもないし……
342 名前:デフォルトの名無しさん mailto:sage [2010/05/18(火) 13:47:54 ] 日本語最強。 Dim 氏名 As String
343 名前:デフォルトの名無しさん mailto:sage [2010/05/18(火) 15:21:21 ] 2バイト表記はエラー起こす処理がMS公式であったはず なんだか忘れたが、2バイト名関数を呼び出した時いらない参照呼び出して不具合引き起こしてたような 対応する気ない見たいだから、でっかいシステム組むのにはエラーでる覚悟はしとくべき
344 名前:315 mailto:sage [2010/05/18(火) 16:38:12 ] ・関数の引数をByValにするのかByRefにするのかは、関数の仕様による。どちらかに決めうち するような性質のものではない。 ・空文字列とvbNullは同じものではない。VarType()してみればわかる。 ・いちいち$バージョンの関数があるかどうか調べるのはめんどくさいので使わない。 そもそもmid()とmid$()とかは別物なのか?とかいうのも調べるのがめんどい。 ・改行文字の種類も揃えたほうがいいかも <= 意味不明。vbCrLfを使いましょうってことだとしても、 別にそろえる必要性を感じない。 ・システムハンガリアンは使わない。
345 名前:315 mailto:sage [2010/05/18(火) 16:40:05 ] ちなみに、俺が昔作ったVBA用コーディング規約で、 「変数の定義はできるだけ遅くやる(使用する行/ブロックの直前でやる」 と決めたら、誰一人共感してくれなくて、驚くほどの反発があったことを思い出したよw
346 名前:デフォルトの名無しさん mailto:sage [2010/05/18(火) 16:49:53 ] コーディング規約というかコーディングガイド的なものとして、こんなの提示したことあった。 ・アーリーバインドをなるべく使う ・イベントプロシージャの中に処理を直接書かない ・変数は一行一個で宣言しろ ・Publicな関数はPascalCaseで ・Const使え こんな感じだったか。
347 名前:デフォルトの名無しさん mailto:sage [2010/05/18(火) 16:51:59 ] あ、そうそう、俺はシステムハンガリアンも使って良い派で、使うならfrmとかを決めてた気がする。
348 名前:デフォルトの名無しさん mailto:sage [2010/05/18(火) 19:47:42 ] 文字列をByValで渡した時って、先頭のポインタが値渡しされるの? それとも、文字列全体がまるまるコピーされるの?
349 名前:デフォルトの名無しさん mailto:sage [2010/05/18(火) 20:40:23 ] 参照渡し プロシジャに値を渡す時、値そのものではなく、値が格納されている 変数のアドレスを渡す 呼び出し先のプロシジャで引数として宣言している変数の値を変更する と、その引数に指定している呼び出し元の変数の値も変更される 値渡し プロシジャに値を渡す時、値そのものをコピーして渡す。 呼び出し先のプロシジャは、渡された値のコピーを受け取るだけなので 呼び出し先のプロシジャで引数として宣言している変数の値を変更して も、呼び出し元の変数は一切影響を受けない。 だったかと
350 名前:デフォルトの名無しさん mailto:sage [2010/05/18(火) 21:15:22 ] >>349 で、ポインタの値渡しなの?中身の値渡しなの?
351 名前:デフォルトの名無しさん mailto:sage [2010/05/18(火) 21:18:55 ] >>350 コピーされる。 ちなみにVBの文字列の型はBSTR。 先頭に文字列長、末尾にヌル文字のUTF16文字列だったかな。
352 名前:デフォルトの名無しさん mailto:sage [2010/05/18(火) 21:27:09 ] 手元の本によると プロシージャの引数の文字列がコピーされるのは以下のタイミング。 ・ByRefだと文字列定数を渡した時 ・ByValだと常時 もちろんポインタのコピーじゃなくて文字列をフルコピー。 VBの文字列はImmutableじゃない。
353 名前:デフォルトの名無しさん mailto:sage [2010/05/18(火) 21:52:10 ] >>351-352 ありがとうございます。 VBAについてそこまで深く書いてある本もあるんですね
354 名前:デフォルトの名無しさん mailto:sage [2010/05/18(火) 22:27:49 ] >>344 ・引数にByRef|ByValを指定しなければByRefになる。 アホが引数を書き換えるとわかりづらいバグに発展する。 普通の関数であれば値渡しでいいはず。参照渡しを積極的に使う場面は少ない。 ・ごめん。vbNullじゃなくてvbNullString。 ・$・非$関数は別物。$じゃなければVariantが帰ってきている。 普通はVariantには用がないはず。作者も$の方使えって言ってる。 ・それならばvbCrLfとvbNewLineどちらを使うのか。 ・システムハンガリアンはどうでもいいや。
355 名前:デフォルトの名無しさん mailto:sage [2010/05/18(火) 22:35:57 ] 作者って誰だよ VBの作者か?
356 名前:デフォルトの名無しさん mailto:sage [2010/05/18(火) 22:44:19 ] 厳密にいうとVBにIntelliSenceつけたチームの中の人だな。
357 名前:デフォルトの名無しさん mailto:sage [2010/05/18(火) 23:13:14 ] VBEの自動構文チェックって邪魔にしか思えないんだが、あれが便利で使ってるって人いる? なんであんなものがあるのか不思議でしょうがない
358 名前:デフォルトの名無しさん mailto:sage [2010/05/18(火) 23:21:43 ] どっかのペインにちょこっとアクティブに表示してくれるだけなら 便利な機能だけどダイアログで出るのが最高にウザいよなw
359 名前:デフォルトの名無しさん mailto:sage [2010/05/19(水) 11:30:50 ] >>354 普通の関数であれば参照渡しでいいはず。 値渡しが必要な場合にのみByValを使え。
360 名前:デフォルトの名無しさん mailto:sage [2010/05/19(水) 11:35:47 ] midとmid$のパフォーマンス気にする奴が、常にByVal使えとか笑えるわ
361 名前:デフォルトの名無しさん mailto:sage [2010/05/19(水) 11:59:22 ] まあそれもそうだね。 ただ、両バージョン混在してるなら$にしろって言うけどね。 参照渡しは本当に理解してないのが多い(特にCとかJavaとかの人)
362 名前:デフォルトの名無しさん mailto:sage [2010/05/19(水) 12:00:52 ] 俺はかっこ悪いから$とかつけない ByValもつけない
363 名前:デフォルトの名無しさん mailto:sage [2010/05/19(水) 12:04:27 ] 変数宣言とか関数宣言だと使うよ。 いちいちAsなんて書いてられない。
364 名前:デフォルトの名無しさん mailto:sage [2010/05/19(水) 12:11:17 ] 兎に角、統一してあればそれでいいや
365 名前:デフォルトの名無しさん mailto:sage [2010/05/19(水) 12:23:27 ] Typename(Mid("a",1,1))ってやるとStringって言われるんだけど、 実際はVariantだってのはどこ見ればわかるのか知りたい。
366 名前:デフォルトの名無しさん mailto:sage [2010/05/19(水) 12:25:02 ] 第一引数を数値にしてみたけどやっぱり戻り値はStringだなあ ?Typename(Mid(123,1)) String
367 名前:デフォルトの名無しさん mailto:sage [2010/05/19(水) 12:34:42 ] そもそもTypeNameってVariant自体は表示しないでしょ
368 名前:デフォルトの名無しさん mailto:sage [2010/05/19(水) 12:41:11 ] >>364 なんかネット上に書いてありそうだけど、この本見てね。 Welcome to PowerVB www.powervb.com/
369 名前:デフォルトの名無しさん mailto:sage [2010/05/19(水) 13:11:03 ] midとmid$の差なんて、100万回実行して0.1〜0.2秒位の差しかないよ。 その程度の差が利いてくるほどの計算量が必要な処理なら、そもそもVBAで やるのがどうかという話もある。 まぁ一般プログラマは気にしなくて良いレベル。
370 名前:デフォルトの名無しさん mailto:sage [2010/05/19(水) 13:20:40 ] Mid$()って、MS BASICあたり位からの互換性のためが主な目的な気がする。 そんな細かいことより、文字列の連結方法を教えといた方がいいよね。
371 名前:デフォルトの名無しさん mailto:sage [2010/05/19(水) 13:21:29 ] 連結方法ってカッコ付ける奴かな。
372 名前:デフォルトの名無しさん mailto:sage [2010/05/19(水) 13:34:17 ] >>368 何書いてあんの? 何を読ませたいの? 英語の勉強からするのも面倒だし ネットに書いてあるとか言うの教えてよ
373 名前:デフォルトの名無しさん mailto:sage [2010/05/19(水) 13:38:34 ] >>371 多分このこと。 support.microsoft.com/kb/170964/ja
374 名前:デフォルトの名無しさん mailto:sage [2010/05/19(水) 13:44:53 ] 別にvbCrLfとvbNewLineが混在してても気にならない。 けど、普通はどっちか一つしか使わんだろ。気分でvbCrLf/vbNewLineをごちゃまぜに使うような奴なら、プログラマ としての素質を疑うよな。 プロジェクト全体として(というほどの大きなプロジェクトがVBAで構築されることがあるのかどうかは知らないが)、 統一されてなくてもかまわんよ。 例えば、CでいちいちNULを'\0'と書けとか言われたら切れるな。0で済むところは0で書くし。 0と'\0'が混在してても気にならないし、0とNULLが混在してても気にならない。
375 名前:デフォルトの名無しさん mailto:sage [2010/05/19(水) 14:01:05 ] 上で出てた参照渡しについて 引数として用意した変数に格納してから渡したほうがいい? call 処理(変数) ↓ 引数 = 変数 Call 処理(引数) 変数 = 引数
376 名前:デフォルトの名無しさん mailto:sage [2010/05/19(水) 14:14:00 ] >>375 こんなレベルの奴がいるなら、基本ByValで渡せというのもうなずけるな。
377 名前:デフォルトの名無しさん mailto:sage [2010/05/19(水) 15:17:35 ] なに一人で戦ってるんだ? 手を貸してやろうか?
378 名前:デフォルトの名無しさん mailto:sage [2010/05/19(水) 16:07:10 ] いつもながら、誰がどの発言なのか良くわからずぐだぐだ
379 名前:デフォルトの名無しさん mailto:sage [2010/05/19(水) 16:25:10 ] 俺も>>314 を支持する派に転向するわw
380 名前:デフォルトの名無しさん mailto:sage [2010/05/19(水) 16:54:16 ] constさえあれば良かった。
381 名前:デフォルトの名無しさん mailto:sage [2010/05/19(水) 17:15:06 ] じゃあ俺も314で
382 名前:デフォルトの名無しさん mailto:sage [2010/05/19(水) 17:31:06 ] >>375 エスパーすると Q: hoge1,hoge2,・・・hogeN それぞれ何度も演算したり入れ換えたりした後に関数を呼び出し 関数の中でも同じ変数名でスパゲッティ大盛り 引数のhogeA,hogeBを間違えて渡した時の修正コストが半端ない だから呼び出し前にそれぞれ変数に値を入れておけば、その部分だけ修正すればいい よって>>375 ですか? A1: つ 参照 A2: つ 規約 A3: そんな時は大抵他の場所でも入れ違いがあるんじゃね
383 名前:デフォルトの名無しさん mailto:sage [2010/05/19(水) 17:52:06 ] VBAコーディング規約は、こんな項目を含めるといいかも。 ・Option Explicit必須 ・デフォルトコントロール名(Text1など)の使用禁止 ・伝統的なループ変数(i, j, k, ...)以外の一文字の変数名禁止 ・ByVal/ByRefの省略禁止 ・変数宣言/定義時は、Variantであっても必ず型名を付ける ・一行の「If ... Then」禁止 ・Goto/Gosub禁止 ・IIf禁止 ・Call禁止(書くな) ・While ... Wend禁止(代わりにDo ... Loopを使え) ・$付き関数がある場合はそれを使え ・「=""」「<>""」の代わりにLenBを使え
384 名前:デフォルトの名無しさん mailto:sage [2010/05/19(水) 18:50:33 ] >>383 >Goto/Gosub禁止 On Error は除いてくれ Call禁止 反対 サブプロシジャ呼び出しであることを明確にしたい
385 名前:デフォルトの名無しさん mailto:sage [2010/05/19(水) 19:16:01 ] >「=""」「<>""」の代わりにLenBを使え 俺普段=””使ってるわ。。。
386 名前:デフォルトの名無しさん mailto:sage [2010/05/19(水) 19:59:17 ] Integerを使わずLongを使え、というのを足しても良いかもな。
387 名前:デフォルトの名無しさん mailto:sage [2010/05/19(水) 21:25:40 ] 足してもいい。Integerが32bitだと思ってる厨房が多い。
388 名前:デフォルトの名無しさん mailto:sage [2010/05/20(木) 13:53:14 ] VBAでオセロでも作ってみようと思うんだけど、まったく分かりません 要点としては @ゲーム開始ボタンを押した後、盤目をクリックしたら駒を描写する所 A一度置いたところにもう置けない判定 B駒を挟んでひっくり返す判定 どうかご教授ください
389 名前:デフォルトの名無しさん mailto:sage [2010/05/20(木) 14:03:49 ] >>388 1. Cells(2, 2).Value = "●" 2. If Len(Cells(2, 2).Value) > 0 Then Debug.Print "おけない" End If 3. Cells(2, 2).Value = "○" つか、VBAじゃなくて他の言語でオセロ書けるのかよ?
390 名前:デフォルトの名無しさん mailto:sage [2010/05/20(木) 21:16:48 ] セルの数字を文字列に変換するマクロを考えていますが、この場合は元の数字に「’」をつける 形で良いのでしょうか?それともCstr を使用した方が適当なのでしょうか?
391 名前:デフォルトの名無しさん mailto:sage [2010/05/20(木) 22:00:31 ] >>385 > >「=""」「<>""」の代わりにLenBを使え > > 俺普段=””使ってるわ。。。 おいらも。こっちのがタイプ量少ないし。 LenBだといいことあるの?
392 名前:デフォルトの名無しさん mailto:sage [2010/05/20(木) 22:01:28 ] >>390 セルの書式を文字列にすれば?
393 名前:デフォルトの名無しさん mailto:sage [2010/05/20(木) 23:07:16 ] >>391 Len 6命令 <=> LenB 5命令 ちょっとだけお得。 これよりもうちょっとコストが付くのが空文字列の比較。 速度で言えば、LenBが最速。
394 名前:デフォルトの名無しさん mailto:sage [2010/05/20(木) 23:20:39 ] >>390 Cells(2, 2).Value = Cells(2, 2).Value + ""
395 名前:デフォルトの名無しさん mailto:sage [2010/05/20(木) 23:42:12 ] >>394 Cells(2, 2).Text & ""
396 名前:391 mailto:sage [2010/05/21(金) 00:02:51 ] >>393 なるほど。性能か。シビアな場合もあるのかもね。 文字列連結も+使うんじゃなくて領域確保した上でMid()使えとか。 おいらはとりあえず性能関係シビアな用途に使っていないし「= ""」 で良いや。
397 名前:デフォルトの名無しさん mailto:sage [2010/05/21(金) 00:26:48 ] >>396 普段使うVBAなんて最速で書けた方が偉いからね。
398 名前:デフォルトの名無しさん mailto:sage [2010/05/21(金) 00:46:22 ] 差が出るほど大規模なプログラムをVBAなんかで書くのか…
399 名前:デフォルトの名無しさん mailto:sage [2010/05/21(金) 00:56:18 ] If文書いてて条件の否定を付けるために カーソル移動するのがめんどいから Xor Trueなんて行末に書き足すのは俺だけでいい
400 名前:デフォルトの名無しさん mailto:sage [2010/05/21(金) 01:06:42 ] >>398 プログラムの規模じゃなくてデータの規模が問題なんだよ。
401 名前:デフォルトの名無しさん mailto:sage [2010/05/21(金) 10:49:32 ] >>383 DoUntill...Loopもだめ?
402 名前:デフォルトの名無しさん mailto:sage [2010/05/21(金) 14:42:26 ] >>398 ループ内で、普通に文字列連結とかしてたら死ぬときがあるよ
403 名前:デフォルトの名無しさん mailto:sage [2010/05/22(土) 11:52:57 ] 文字連結で何故死ぬの?
404 名前:デフォルトの名無しさん mailto:sage [2010/05/22(土) 12:05:08 ] >>402 これ書いたのだれ?もしかしておれ?
405 名前:デフォルトの名無しさん mailto:sage [2010/05/22(土) 13:04:22 ] 多分このこと。 support.microsoft.com/kb/170964/ja 文字列連結は、需要が多い上に意外と時間がかかる。 何も考えずに作ると処理が死ぬほど遅くなる。
406 名前:デフォルトの名無しさん [2010/05/22(土) 16:35:49 ] すいません、しょうもないことと承知で質問します。 xlnoneとは何をするのでしょうか?
407 名前:デフォルトの名無しさん mailto:sage [2010/05/22(土) 17:17:17 ] 何もしない ただの書式設定のプロパティ値 罫線描画を線無しにする時とかにプロパティをこれに設定する
408 名前:デフォルトの名無しさん mailto:sage [2010/05/22(土) 21:00:46 ] Listviewのリストは、縦には出せないのでしょうか?
409 名前:デフォルトの名無しさん mailto:sage [2010/05/22(土) 21:13:44 ] わかりづらかったですね。 Listviewは、縦スクロールにならないのでしょうか?
410 名前:デフォルトの名無しさん mailto:sage [2010/05/22(土) 22:22:26 ] 変数の規約について 例えば出勤日リストの行を定義する変数名 Shukkin_row_count_ ってするより、 S_r_c_ ' Shukkin_row_count_ としたほうが、タイプミスや誤読が減って設計コスト下がるよね むしろアンダーラインなくして頭文字を大文字で対応すべきかなあ コードが長くなると変数の意味が散逸しかねないけど……
411 名前:デフォルトの名無しさん mailto:sage [2010/05/22(土) 22:45:34 ] そんな意味ならコメントは日本語でよくね?
412 名前:デフォルトの名無しさん mailto:sage [2010/05/22(土) 22:55:31 ] >>410 ワケ判らん変数名は付けるな 下手に短い名前なら意味が判る長い変数名の方がよぉ〜っぽど良いわ、ヴォケ
413 名前:デフォルトの名無しさん mailto:sage [2010/05/22(土) 23:09:26 ] 問題は長い短いじゃなくて俺の命名センスにあるのかな 300行くらいの短いコード書いてみたが、変数名省略しなくても慣れたらすらすら書けた コメント部分が200行くらいになったが >>411 うん、コード書く時は日本語コメントは当然付ける それに追加で、省略前の変数名明示ってことで
414 名前:デフォルトの名無しさん mailto:sage [2010/05/22(土) 23:09:28 ] 他の項目にS_r_o_とかあったら死ねるな。 COBOLに侵され気味な俺だと、 SHUKKINrowCountかSHUKKIN_rowCountって感じかなあ。 ベタローマ字は全て大文字というのが俺的基本法則。
415 名前:デフォルトの名無しさん mailto:sage [2010/05/22(土) 23:22:55 ] 俺ならVBAとC#では気にせず変数名や関数名に日本語使う それで可読性や開発効率が上がるなら別にいいじゃんてスタンス
416 名前:デフォルトの名無しさん mailto:sage [2010/05/22(土) 23:30:18 ] >>413 その省略前の変数名という考え方がわからん s_r_c_'出金の行数 とかでいいと思ってしまう
417 名前:デフォルトの名無しさん mailto:sage [2010/05/23(日) 00:26:49 ] S_r_c_と言う記号で見るのと Shukkinn_row_count_と言う意味で見るのを比べれば、 保守する時の可読性、認識レベルが異なる だから逆に、接続を長くして意味を持たせるか、後で読み返した時の読みやすさを高めるために省略するかで迷ってる 日本語変数を使うってのが両方満たして楽なんだが……予期しないエラー引き起こすリスクもある
418 名前:デフォルトの名無しさん mailto:sage [2010/05/23(日) 00:30:35 ] 母音省略でいいよ。 sknRowCnt
419 名前:デフォルトの名無しさん mailto:sage [2010/05/23(日) 00:32:35 ] あれ、回答レスになってないな? 省略前って言うのは、今Shukkinn_row_count_って変数があるけど、これをS_r_c_に省略した場合 ってことで使ったんだが、↑のように保守作業時に変数の意味を理解させるって側面もある
420 名前:デフォルトの名無しさん mailto:sage [2010/05/23(日) 01:23:02 ] ソースは他人が見てわかるように書くべし そして「明日の自分は他人」 結論。好きにしろ
421 名前:sage [2010/05/23(日) 23:37:36 ] すみませんが、どなたか教えていただきたいことがあるのです。 エクセル2003でADOを用いてアクセス2003のデータを抽出したいのですが、 抽出条件で「・・・を含む」としたいのですが、上手くいきません。具体的には .Source = "SELECT * FROM テーブル1" & _ " WHERE 日時>=" & 開始日 & " AND 日時<=" & 終了日 & _ IIf(Range("B10") <> "", " AND 依頼者='" & Range("B10").Value & "'", "") & _ IIf(Range("B12") <> "", " AND 項目='" & Range("B12").Value & "'", "") となっておりまして、テーブル1というアクセスのテーブルから、日時と依頼者と項目を完全一致で抽出することはできました。 この中から依頼者と項目に関して、「・・・を含む」条件にしたいのですがLIKE演算子等入れても上手くいきません。 どなたか教えていただけますでしょうか。
422 名前:デフォルトの名無しさん mailto:sage [2010/05/23(日) 23:40:15 ] >>421 SQLの問題というなら SQL質疑応答スレ 9問目 pc11.2ch.net/test/read.cgi/db/1252492296/l50 若しくは同じデータベース板のAccessスレ(あるのかどうかは知らん)へGo !
423 名前:デフォルトの名無しさん mailto:sage [2010/05/23(日) 23:46:23 ] >>421 上手くいかないとき、Sourceにどんな文字列が入っているのか出力して見てはいかが?
424 名前:421 mailto:sage [2010/05/23(日) 23:53:16 ] >>422 問題はSQL何ですかね?だとすると手がつけられません。 >>423 デバックしたときに見た文字列は上手くいっていました。 ということは外部データの取り込みではLIKE演算子は無理なのでしょうか・・・
425 名前:デフォルトの名無しさん [2010/05/23(日) 23:54:57 ] むり
426 名前:デフォルトの名無しさん mailto:sage [2010/05/24(月) 00:00:03 ] あれ?できなかったっけ?
427 名前:421 mailto:sage [2010/05/24(月) 00:05:18 ] たとえば IIf(Range("B10") <> "", " AND 依頼者='" & Range("B10").Value & "'", "") & _ のところを、 IIf(Range("B10") <> "", " AND 依頼者 Like'%" & Range("B10").Value & "%", "") & _ へ変えてみても上手くいきませんでした。 もしかして書き方が間違ってますか?
428 名前:デフォルトの名無しさん mailto:sage [2010/05/24(月) 00:14:13 ] >>424 デバッグで見ただけでは分かりにくいエラーは有るよ 俺はSQL文をテキストファイルに出力するプロシジャを作って 別途確認する様にしてる w
429 名前:デフォルトの名無しさん mailto:sage [2010/05/24(月) 00:18:14 ] >>427 Value & "%" の%の後ろのシングルクォートは? あと一応Like演算子と文字列の間にスペースを入れようか。 それとセルの内容エスケープしてないのはわざとだよね?
430 名前:デフォルトの名無しさん mailto:sage [2010/05/24(月) 00:25:43 ] マンドクセだから確認してないけど 先に抜き出す条件を文字列でSQLにぶちこんでみ それで出来ないなら構文かデータベースチェック
431 名前:421 mailto:sage [2010/05/24(月) 00:28:19 ] できました!。皆さんありがとうございます。 特に>>427 さん 大変ありがとうございます。 恥ずかしながら、後ろ側のシングルクォーテーションが必要とは知りませんでした。 また、Likeの後にスペースを入れていないことも原因のひとつでした。(本当に情けない。。) >>427 さん 後学のため教えていただけますか? >それとセルの内容エスケープしてないのはわざとだよね? 具体的にはどういったことでしょうか?
432 名前:421 mailto:sage [2010/05/24(月) 00:30:22 ] 興奮してレスを間違えました。 429のレスは427ではなく>>429 さんへのレスでした。
433 名前:デフォルトの名無しさん mailto:sage [2010/05/24(月) 00:32:44 ] >>431 エスケープっていうのはたとえば、Range("B10")の内容に シングルクォートが含まれていたりしたらSQL文として 文法エラーになるよ、っていうだけの話。 Like '%'%' みたいになったらシングルクォートの閉じ位置が 変わるので文法エラーになる。 まあ、自分で使うツールってだけならあんまり気にしなくていいよ。
434 名前:421 mailto:sage [2010/05/24(月) 00:40:20 ] >>433 なるほど・・・ たしかにそうですね。勉強になります。 今回は時間の都合上、運用面で対処したいと思いますが、 今後はそういったことを含めて構築していきたいと思います。 とにかくありがとうございました。
435 名前:デフォルトの名無しさん [2010/05/24(月) 08:17:43 ] D-SUB9ピンのRS-232Cで接続するバーコードリーダーから文字列を入力する方法を教えてください TELNETで認識するところまでは出来たのですがそこまでしか出来ませんでした
436 名前:デフォルトの名無しさん mailto:sage [2010/05/24(月) 09:00:54 ] だれかイミディエイトウィンドウを画面右側にぴったりフィットさせる方法を教えてくれ。 前はいろいろいじくってたらなんとかできたんだけど、今どうやっても上手くいかない。
437 名前:デフォルトの名無しさん mailto:sage [2010/05/24(月) 09:22:38 ] しばらくここ読んでなくて乗り遅れたが、空文字の代わりにvbNullStringって書いたやつ誰だよ。 どういう場面を想定したか知らんがrange("a1").value=vbnullstringなんてのは間違いだよなぁ。
438 名前:デフォルトの名無しさん mailto:sage [2010/05/24(月) 09:25:46 ] 2ch もう終わってるね
439 名前:デフォルトの名無しさん mailto:sage [2010/05/24(月) 09:30:59 ] そんなことを言う人は破門です
440 名前:デフォルトの名無しさん mailto:sage [2010/05/24(月) 09:48:26 ] LenBがLenより速いとか書いたやつもしっかりString型の時と書かなきゃいかん。 Excelでよく使うVariant型では逆になるぜ。
441 名前:デフォルトの名無しさん mailto:sage [2010/05/24(月) 09:53:23 ] >>435 VBみたくAPI使えばいいんでね
442 名前:デフォルトの名無しさん mailto:sage [2010/05/24(月) 10:05:25 ] 436 ぐっとしてきゅって右下にばっする
443 名前:デフォルトの名無しさん mailto:sage [2010/05/24(月) 10:18:36 ] >>440 くどくなるので必ずこうしろと言うわけではないが、Variant型の2次元配列の 各要素の型が何型か判定する場合が多いと思うが、判定して文字列だったら String型の一時変数に格納して処理した方がベター。 そうすればLenBが確かに速い。 数値などの他の型でも一時変数に移した方がいいのは同じ。
444 名前:436 mailto:sage [2010/05/24(月) 10:26:51 ] >>442 d でけたぜ! 右下にってのがコツなんだな。
445 名前:デフォルトの名無しさん mailto:sage [2010/05/24(月) 11:04:44 ] 正直、=""とかLenBとかにこだわってるのはほとんど無意味だぜ そんなの、長い文字列を連結したり、RangeのCopyメソッドを使った瞬間に 無意味になる
446 名前:デフォルトの名無しさん [2010/05/24(月) 14:06:07 ] Public Type A ID As Integer Name As String End Type Public Type B ID As Integer Name As String ByRef A As String <-ここでエラーが出る End Type Sub main() Dim TableA() As A Dim TableB() As B ・・・・ End Sub TableBでTableAのメンバーの一つを参照させたいのですが、上記のような記述だとエラーが出ます。 構造体のメンバーに参照(ポインタ)を使いたいのですが方法はないものでしょうか?
447 名前:436 mailto:sage [2010/05/24(月) 16:53:58 ] >>447 文字列の連結に単純連結がいけないのはほとんどの人が知ってるだろ? あとはいかにスマートにMidステートメント使うかが腕の見せ所。 まぁ今はバカでも使えるJoinがあるので楽になったけどな。
448 名前:デフォルトの名無しさん mailto:sage [2010/05/24(月) 19:01:08 ] 単純な文字列連結にこだわりすぎるやつも馬鹿だな 文字列連結なんて大抵は短い文字列同士の連結にしか使わず さらに回数もたいしたことないのが普通なんだから その辺をわかってて使うなら普通の簡潔な記述の方が優れてる
449 名前:デフォルトの名無しさん mailto:sage [2010/05/24(月) 20:19:31 ] >>448 んなこたー当たり前。 回数の多い例が出てたんでね。 こんなのほとんどの言語で共通だと思うが、未だに知らない人もいるみたいなんでね。
450 名前:デフォルトの名無しさん mailto:sage [2010/05/24(月) 20:34:22 ] 長さ0の文字列かどうかならLenとかLenBの方が""と比較するよりいいかも知らんが、セルが空白かどうかを調べるだけならIsEmptyが一番軽いだろうねぇ。 俺は大体""と比較するけどな。
451 名前:デフォルトの名無しさん mailto:sage [2010/05/24(月) 22:12:41 ] そういうチマチマした高速化の技術はどうでもいい 高速化で本当に困るのはそんなところじゃない 上で出てた文字列連結の知識や、valueを配列に一気に出し入れする技、 WorksheetFunctionを使う技などをまず覚えるべき
452 名前:デフォルトの名無しさん mailto:sage [2010/05/24(月) 22:38:03 ] >WorksheetFunctionを使う技 意識したことないけど、これどんなん?
453 名前:デフォルトの名無しさん mailto:sage [2010/05/24(月) 23:43:02 ] >>451 そんな低レベルな話してもしょうがねぇなぁ。 お前の文字列連結を手直ししてやるからここで書いてみ? A1:A60000の値をカンマで連結するコードを書け。 ただし
454 名前:デフォルトの名無しさん mailto:sage [2010/05/24(月) 23:44:24 ] おっと途中で送信したぜ。 ただしJoinはなしな。 これは猿でもできるから。
455 名前:デフォルトの名無しさん mailto:sage [2010/05/25(火) 02:44:49 ] 高速化言うんならCとかでDLL作って呼び出したらいいんじゃね VBAですることじゃない
456 名前:デフォルトの名無しさん mailto:sage [2010/05/25(火) 06:08:39 ] 何で書こうと回数の多い連結を単純に連結しては駄目だわな。 以前VBAを馬鹿にした酔っ払いSQL厨がいたが、アルゴリズムも知らない馬鹿だったぜ。
457 名前:デフォルトの名無しさん mailto:sage [2010/05/25(火) 08:09:07 ] >>453 の素晴らしい回答にご期待ください。 俺は猿でもできるJoin使うけど。
458 名前:デフォルトの名無しさん mailto:sage [2010/05/25(火) 08:54:57 ] 適当に A6000までコピー クリップボードから変数に抜き出し Replaceでvblfを,に変換 書き出し そこそこ早いかな?
459 名前:デフォルトの名無しさん mailto:sage [2010/05/25(火) 08:59:05 ] >>456 回数だけではない どちらかというとむしろ、文字列が長いかどうかが重要だな 回数というのもどちらかというと、「ペース」と置き換えるべきだし
460 名前:デフォルトの名無しさん mailto:sage [2010/05/25(火) 09:15:49 ] 連結してねえw
461 名前:デフォルトの名無しさん mailto:sage [2010/05/25(火) 10:02:35 ] A60000だった 列Aでもいいな
462 名前:デフォルトの名無しさん mailto:sage [2010/05/25(火) 10:46:29 ] お前と連結したいよ
463 名前:デフォルトの名無しさん mailto:sage [2010/05/25(火) 11:47:36 ] ウホッ
464 名前:デフォルトの名無しさん mailto:sage [2010/05/25(火) 12:24:32 ] プログラムとしては面白いが、解答としてはどうなの 実際に文字列連結する場合、配列でもなんでもいいけど書き出してからその処理するのは流石に時間かからないかな 見てないけど
465 名前:デフォルトの名無しさん mailto:sage [2010/05/25(火) 12:48:58 ] もう連結ネタ飽きたのでそろそろ別のネタ始めてクレクレ
466 名前:デフォルトの名無しさん mailto:sage [2010/05/25(火) 13:07:40 ] ネタも何も質問スレなんだから質問ありきだろ
467 名前:デフォルトの名無しさん mailto:sage [2010/05/25(火) 13:10:42 ] 素直にJoin使えばいいのに、禁止する意味がわからない 何がしたいの
468 名前:デフォルトの名無しさん mailto:sage [2010/05/25(火) 13:16:14 ] 任意の型の空の配列を作成する方法ってありますか? String型ならSplit()で行けるし、Variant型ならArray()でいけますが、 他の型はどうやって作成すればよいでしょうか?
469 名前:デフォルトの名無しさん mailto:sage [2010/05/25(火) 13:26:26 ] >>458 DataObject使うのか? でもReplaceが遅いからなぁ。 試しに A1 A2 . . A599999 A600000 と2文字〜7文字の60万セルでやってみたら2.8秒だったぜ。 DataObjectとSplitとJoinの併用でもほぼ同じ。 一方Midステートメントは0.6秒。 ループ回して一次元配列に移してJoinは微差でMidステートメントに負けるようだが俺ならJoin使うな。 なんたって楽だからな。
470 名前:デフォルトの名無しさん mailto:sage [2010/05/25(火) 13:34:18 ] 上は連結文字列の作成だけで書き出しは入ってないからね。
471 名前:デフォルトの名無しさん mailto:sage [2010/05/25(火) 21:15:37 ] 60万行じゃなく6万行でやってみたら>>458 のDataObjectが一番速いな。 Dictionaryと似たような特性だな。 数万データならそこそこ速いが数十万になるとウンコってやつ。
472 名前:デフォルトの名無しさん mailto:sage [2010/05/25(火) 21:32:17 ] で、結局どんな答えを想定してたんだ?
473 名前:デフォルトの名無しさん mailto:sage [2010/05/25(火) 21:38:05 ] クリップボード経由で数百万語を一変数に押し込む処理ってCPUとメモリに依存しそうだが
474 名前:デフォルトの名無しさん mailto:sage [2010/05/25(火) 22:51:12 ] まだまだCPUやメモリは速くないなと思ってしまった。
475 名前:デフォルトの名無しさん mailto:sage [2010/05/25(火) 23:27:54 ] 思いつきで書いただけだが、「エクセルVBAテクニック」としてなら有りな感じ? 限定条件下になりそうだけど
476 名前:デフォルトの名無しさん mailto:sage [2010/05/26(水) 00:40:46 ] >>458 はvbLfじゃなくvbCrLfだな。
477 名前:デフォルトの名無しさん mailto:sage [2010/05/26(水) 17:00:12 ] Mid$とclsConcatenate使って、 vbCrLfは10と13だから、SelectCaseでそれぞれ処理し、 2文字ずつカウントする ……と、多分こういう解答を求めてたんだろうか
478 名前:デフォルトの名無しさん mailto:sage [2010/05/26(水) 20:43:51 ] Mid$以外使う必要がないでしょ clsConcatenateってなんだろうと思って検索したら 独自に作ったStringBuilderもどきがひっかかった もし、そういうのを使うならclsConcatenateだけでいいし vbCrLfでSelect Case云々言ってるのは、なんでそんなことをしてるのか ちょっとわからない
479 名前:デフォルトの名無しさん mailto:sage [2010/05/26(水) 21:03:22 ] 初歩的なことなのだが教えて欲しい。 Public変数は、プロシージャの処理終えると値消えてしまうのか?
480 名前:デフォルトの名無しさん mailto:sage [2010/05/26(水) 21:12:04 ] 基本的に残るけど、一定のタイミングや、 Endステートメントを実行すると初期化されなかったっけ。
481 名前:デフォルトの名無しさん mailto:sage [2010/05/26(水) 22:26:59 ] >>479 VBAの処理が終わったあとで変数の内容を見るには、イミディエイトウィンドウで? たとえば変数aの値を確認したければ?a[Enter]と入力すればいい ttp://f12.aaa.livedoor.jp/~itatisa/phpup/cgi/src/up9840.png 変数がクリアされる条件は、Endを実行した時(End SubやEnd Functionではなく単独のEnd文) エディタやマクロの記録などでVBAを書き換えたとき
482 名前:デフォルトの名無しさん mailto:sage [2010/05/26(水) 23:35:58 ] VBAの本でいい本ってある? なんか、サンプル載せましたよ みたいな本ばっかりで、このスレに書いてあるようなことが載ってる本 見たこと無いんだけど 例えば、>>481 に書いてあるようなこととか、つい最近話題になった 文字列連結のことだとか、そういうことすら、書いてある本を ほとんど見たことがない
483 名前:デフォルトの名無しさん mailto:sage [2010/05/26(水) 23:41:14 ] フェイタンと師団長だったら、別に師団長が強烈な発を持っていなくても 勝負はわからんよなw
484 名前:デフォルトの名無しさん mailto:sage [2010/05/27(木) 00:11:27 ] 最近かってためになったのは ExcelVBAスキルアップテクニック Excelプロフェッショナルエンジニアテクニック かな
485 名前:デフォルトの名無しさん mailto:sage [2010/05/27(木) 00:26:31 ] >>482 VBAはVB6と言語としては全く等価だから VB6で探したほうがいいね。
486 名前:デフォルトの名無しさん mailto:sage [2010/05/27(木) 05:20:36 ] >>480-481 なるほど。Endで消えてしまうとは、知らなかった。 ありがとう。
487 名前:デフォルトの名無しさん mailto:sage [2010/05/29(土) 20:28:43 ] これ出来ないのかな、と前から何度も思ってた事なのですが、 テキストボックスとテキストボックスなら、図形の矢印で結ぶことができて、 片方のテキストボックスを動かしたら、矢印の線も一緒に動くじゃないですか。 これを、 セルとテキストボックスでやることは出来ないのでしょうか? つまり、テキストボックスから、矢印を延ばして、あるセルにくっつけます。 そして、どっちを動かしても、矢印で繋がったままにしたいのです。
488 名前:デフォルトの名無しさん mailto:sage [2010/05/30(日) 10:02:24 ] ttp://www.youtube.com/watch?v=ZYuIQIComPo
489 名前:デフォルトの名無しさん [2010/05/30(日) 12:41:07 ] 質問です。。 ユーザーフォームのラベルでバック半透明で文字だけをくっきり表示させたいです。 どうすればよろしいでしょうか?
490 名前:デフォルトの名無しさん mailto:sage [2010/05/30(日) 22:55:02 ] VBAでマウスカーソルをピクセルで指定してクリックさせるにはどうするのが良いのですか? 今はShellを使って別プログラムから呼び出してますが、処理が遅くなるので もっとスマートなやり方があれば教えて下さい。
491 名前:デフォルトの名無しさん [2010/05/31(月) 05:10:33 ] うんこ
492 名前:デフォルトの名無しさん mailto:sage [2010/05/31(月) 08:39:22 ] >>488 VBAで作るとすると 1.矢印の起点・終点(高さ)を取得 セルなら(i-1)までの.RowHeightの合計プラス(iの.RowHeight)/2 テキストなら位置プラス(高さ)/2 2.横位置を取得 同様に 3.左右のオブジェクト判定 セル、テキストボックスの右端位置を比較 4.1と2を元に矢印の位置設定 >>499 ラベルのプロパティ→項目別→表示 で好きなの選ぶ
493 名前:デフォルトの名無しさん [2010/06/01(火) 01:02:31 ] >>489 の質問は492で解決になっているのか?? 表示の中に半透明の設定なくない?
494 名前:デフォルトの名無しさん [2010/06/01(火) 07:19:17 ] EXCEL2003、XPsp2です。 EXCELのVBAだけを使って、インターネット(TCP/IP)通信をする プログラムは作れるのでしょうか? 難易度は問いません。 よろしくお願いします。
495 名前:デフォルトの名無しさん mailto:sage [2010/06/01(火) 08:21:24 ] ぐぐったらフォームの半透明化が見つかった 窓側のコントロールのカスタム描画を使うAPIだな 半透明ってのがイメージ湧かないが
496 名前:487 mailto:sage [2010/06/01(火) 12:52:30 ] ありがとうございました
497 名前:デフォルトの名無しさん mailto:sage [2010/06/01(火) 17:06:19 ] Docmd.RunSQLってマルチプルINSERT対応していますか? DBはMySQLです。
498 名前:497 mailto:sage [2010/06/01(火) 17:19:55 ] あ、ここAccessじゃなくてExcelでした。 すみません。
499 名前:デフォルトの名無しさん mailto:sage [2010/06/01(火) 22:20:26 ] Formulaで数式埋め込もうとすると短い式なら問題ないんだが、 複雑な(長い)式になるとTRUEを返される。 何だこれ?
500 名前:デフォルトの名無しさん mailto:sage [2010/06/01(火) 22:24:10 ] もっと色んなパターン試せばどうだろう 別の長い式作って
501 名前:デフォルトの名無しさん [2010/06/01(火) 22:46:14 ] EasyCommっていうフリーウェアをインポートして 装置からデータをRS-232C経由で取り込むプログラムを書いたんですが、 プログラム動作中はストップキーも聞かず、入力を受け付けてくれない ようです。これってそういう仕様とあきらめるしかないのでしょうか。
502 名前:デフォルトの名無しさん mailto:sage [2010/06/01(火) 22:51:58 ] DoEventsじゃなくて?
503 名前:デフォルトの名無しさん mailto:sage [2010/06/02(水) 07:37:52 ] 真偽返すのはどっか引数が抜けてるんじゃね
504 名前:デフォルトの名無しさん mailto:sage [2010/06/02(水) 11:32:10 ] >501 んなこたぁない。
505 名前:デフォルトの名無しさん [2010/06/02(水) 20:39:09 ] エクセル2000では動く、エクセル2007では 動かないマクロがあるんだけど。 考えられる原因ってどんなのがあるの?
506 名前:デフォルトの名無しさん mailto:sage [2010/06/02(水) 21:40:52 ] 大抵は、変更とか削除された機能を使っていたとかじゃないか? 2007で旧時代の機能は大分整理されたみたいだからな。
507 名前:499 mailto:sage [2010/06/02(水) 21:57:24 ] 解決した。 結局TRUEが返される理由はわからんが、 思い通りの結果が出たのでまぁ良しとする。
508 名前:デフォルトの名無しさん [2010/06/02(水) 22:08:20 ] >>506 そうなん?ってことは2007で動くように 作りなおさなきゃってこと? そのまま使える方法ってないのかなぁ?
509 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 11:30:03 ] ない 2003と2007はまったく別のソフトだと思った方がいい 何も全部作り直さなくても、たいていのマクロは少し修正するだけで使えるようになるはず
510 名前:デフォルトの名無しさん [2010/06/03(木) 19:45:17 ] 両方で動くようにはできないってこと?
511 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 20:22:43 ] それは内容による 速度やExcelそのものの制限に関係なく、 両方で結果が同じになる関数ばかり使ってればいい
512 名前:デフォルトの名無しさん [2010/06/04(金) 06:30:29 ] 両方で結果が違う関数なんてあるんだぁ たとえばどんな関数?
513 名前:デフォルトの名無しさん mailto:sage [2010/06/04(金) 08:14:47 ] version
514 名前:デフォルトの名無しさん mailto:sage [2010/06/04(金) 11:34:28 ] おおっと
515 名前:デフォルトの名無しさん mailto:sage [2010/06/04(金) 12:06:55 ] Versionはプロパティ
516 名前:デフォルトの名無しさん mailto:sage [2010/06/04(金) 23:56:59 ] WorksheetFunction
517 名前:デフォルトの名無しさん mailto:sage [2010/06/05(土) 00:07:43 ] エクセルver2002を使っています。 印刷設定について教えていただきたいのですが、 一枚77行で縦に任意の枚数(2枚なら77*2行)にあわせて行を77行ごと追加する マクロがあるのですが、この作成された任意の枚数の表の印刷範囲についてなのですが、、、 表作成後に表全体を選択して印刷範囲設定しているのですが With ActiveSheet .PageSetup.PrintArea = Range(."表全体").Address End With ※縮尺73%、A3、品質300dpi プリンターの種類、印刷品質、余白の設定で印刷行数が77からずれることがあります。 【質問】 1.マクロで、縮尺はきにしないで常に77行目に印刷境界線をもってくることはできますでしょうか? 2.また、縮尺50%にしても77行ごとに印刷境界線をもってくることはできますでしょうか? よろしくお願いいたします。
518 名前:デフォルトの名無しさん mailto:sage [2010/06/05(土) 03:54:52 ] ipadでExcelVBA動くようにならんかね
519 名前:デフォルトの名無しさん mailto:sage [2010/06/05(土) 04:01:07 ] >>517 77行毎に一旦別のシートにコピーして 印刷 その後そのシートは削除するとか
520 名前:デフォルトの名無しさん mailto:sage [2010/06/05(土) 07:11:07 ] >>518 つ Citrix Receiver for iPad
521 名前:デフォルトの名無しさん mailto:sage [2010/06/05(土) 20:49:36 ] >>517 印刷境界線ってのは何をさしてるんだ? 印刷範囲を77行までにするなら ActiveSheet.PageSetup.PrintArea = "$1:$77" 78行の前に改ページ入れたいなら Rows("78:78").Select ActiveWindow.SelectedSheets.HPageBreaks.Add Before:=ActiveCell とりあえずマクロの記録でこうなった
522 名前:517 mailto:sage [2010/06/06(日) 14:03:42 ] >>517 です。 分かりにくい説明ですみません。 縦に1〜77と数字を入れたとして、次ページでまた1〜77といれる。 【縮尺100%】 1 2 3 ・ ・ 76 77 --------改ページのライン 1 2 3 ・ ・ 76 77 -------改ページのライン
523 名前:517 mailto:sage [2010/06/06(日) 14:05:33 ] 【縮尺90%】 1 2 3 ・ ・ 76 77 1 2 --------改ページのライン 3 ・ ・ 76 77 1 2 3 4 --------改ページのライン 縮尺が100→90%になったときに改ページラインがずれてしまいます。(列側のラインも同様にずれます) また印刷の余白を変更したり、解像度を変更したりしてもずれます。 複数シートに同じような表があり、マクロで一括で体裁を整えたいのですが、 上記のようなとき、手動で改ページラインを77と1の間にもっていけば 自動的に100%になり綺麗に印刷することができます。 この時手動であれば90%のままで77行ごとにもできます。 これをマクロで印刷範囲を77行ごとにしたいのです。 ※縮尺は問いません。(縮尺指定できるのであればやり方だけでも教えていただけたらと思いますが・・・)
524 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 14:52:35 ] だから、77行目ごとに改ページ入れたいんだろ >>521 の後半でわからない?まったくの初心者か? その77行ごとにデータ入れるマクロで、改ページも入れるようにすればいいだけなんだが わからんようなら、A列から1を探してその手前に改ページ入れるマクロ書いといてやる Dim row ActiveSheet.ResetAllPageBreaks row = 1 Do row = row + 1 If Cells(row, 1).Value = 1 Then ActiveWindow.SelectedSheets.HPageBreaks.Add (Cells(row, 1)) End If Loop Until Cells(row, 1).Value = "" 2007で作ってるけど、たぶん2002でも動くと思う 暗黙の型変換気持ち悪いとかいう突っ込み禁止
525 名前:517 [2010/06/06(日) 17:26:45 ] >>524 さん ご指摘ありがとうございます。 マクロはネットで調べながら覚えたもので、勉強不足ですみません。 そして、謎が解けました! ActiveSheet.ResetAllPageBreaks の時点で自動で縮尺が100%になるんですね。 この後に縮尺を90%にしてから HPageBreaks.Add で改ページをいれてあげたらうまくいきました。 ありがとうございました。
526 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 20:12:11 ] 下記のデータが仮にあったとします。 ユーザーフォーマットを使用してコンボボックスにユーザーID(A列)を 配置し、指定されたA列のB列、C列データを呼び出し変更を加えれるようにしたいのですが、 コンボボックスとテキストボックスをどのように紐つければよいのでしょうか? A B C 1 犬 雄 2 猫 雄 3 鳥 雌
527 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 20:35:57 ] 更新後処理
528 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 21:23:42 ] アドインを2つ作りました。 中のプログラムはモジュール名から何まで全く同じで、 途中で参照するファイル(テキスト)だけが異なります。 別の業務をしている人向けに、それぞれに作ったのですが、 兼業する人が両方のアドインを追加すると、うまく動きません。 具体的には、最初に動かした方のテキストをずっと読んでしまうようです。 どこを変えれば動くようになるでしょうか。
529 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 21:58:41 ] 空が青いなぁ。
530 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 22:01:43 ] 全部同じなら中の人も見分けつかないだろうな 処理なり使ってるシステムから切り替え出来ないの?
531 名前:デフォルトの名無しさん [2010/06/07(月) 21:22:06 ] 既にシート中にある、表の中身(文字列)を二次元配列として変数に代入して 他のシートのセルに場合わけして入れる場合、どのように書いたらよいのでしょうか?
532 名前:デフォルトの名無しさん mailto:sage [2010/06/07(月) 21:46:32 ] Hairetu = range( , ) ループ処理 Hairetu(i,n)の条件分岐でHairetuBにでも格納 sheets( ).rante(,) = HairetuB
533 名前:デフォルトの名無しさん mailto:sage [2010/06/07(月) 22:08:28 ] >>532 さん、ありがとうございます。 最初の変数の代入は、どのように記述すればよいのですか? 二次元配列を宣言してx(i,n)でstring型で宣言したのですが、 データ数が多いのでfor文で回して代入したいのです。、 range("A1")を代入するとしたら、for文はどうなるのですかね?? For i = 1 To 18000 For j = 1 To 18 x(i,j) = Range(i, j) Next j Next i こうじゃないですよね。。
534 名前:デフォルトの名無しさん mailto:sage [2010/06/07(月) 22:14:31 ] Hairetu = range("A1:Z99")
535 名前:デフォルトの名無しさん mailto:sage [2010/06/07(月) 22:47:54 ] ありがとうございます。 すみません、最後の別シートの格納の仕方についてなのですが… 例えば、x(2,3)の内容をRange("C2")に入れるなど、所定の場所に格納 する際に、for文で回して入れる方法はあるのでしょうか?
536 名前:デフォルトの名無しさん mailto:sage [2010/06/07(月) 23:12:48 ] >>533 ワークシートの内容を配列に入れるには、配列を二次元のVariant型にしておけば、セルがいくつあっても一気に代入できる。 Forを使うより何倍も速いしプログラムも簡単。 String型にしてしまうとFor〜Nextを使うような遅い方法しか使えなくなる。
537 名前:デフォルトの名無しさん mailto:sage [2010/06/07(月) 23:14:50 ] >>535 そりゃ Range("C2") = x(2, 3) だろう。 ほかのデータはどこに入れるの?規則的に並んでなければForを使うのは面倒だよ。
538 名前:デフォルトの名無しさん mailto:sage [2010/06/08(火) 18:05:08 ] 別の配列に入れ替えればいいだろに
539 名前:デフォルトの名無しさん mailto:sage [2010/06/08(火) 23:49:19 ] 質問なのですが、 セル範囲を一括で配列に格納した場合の添え字を 0からスタートさせることは出来ますか? 普通に格納するとx(1,1)から数値が入ってしまうところを x(0,0)から数値が入るようにしたいのです。 今は別の配列に入れ替えてるのですが、ちょっと不便で・・・ よろしくお願いします。
540 名前:デフォルトの名無しさん mailto:sage [2010/06/08(火) 23:59:25 ] Excel2007 テキストボックスのScroolBarsプロパティをfmScrollBarBothに設定しているんですけど、 ホイールマウスの真ん中のホイール部分を回転させても有効になりません。 有効にする方法ってありますか?
541 名前:デフォルトの名無しさん mailto:sage [2010/06/09(水) 02:26:41 ] >>539 無理。 VBAでは、0オリジンに拘るよりも、1オリジンを素直に受け入れた方が何かと楽だよ。
542 名前:デフォルトの名無しさん mailto:sage [2010/06/09(水) 04:03:16 ] まだ勉強しだして一週間なんですが教えてください AとBにそれぞれ1〜50の数字を代入し AとBを掛け合わせた数を縦方向にペペペと貼り付けを繰り返したいんですが 1×2と2×1は答え同じなんで重複を無くすために 代入する数値を【A>B】と定義するのってどうしたらいいんですか ↓こんな感じでやってます Dim A Dim B for A 1 to 50 for B 1 to 50 (右クリックコピーでペペペと貼り付けるマクロ省略) Next B Nezt A
543 名前:デフォルトの名無しさん mailto:sage [2010/06/09(水) 04:56:01 ] やりたいこと(出来上がりイメージ)がよくわからん上に 大事なとこが省略されてる気がする とりあえずA>Bのときだけなんかの処理をしたいのなら Dim A Dim B for A=1 to 50 for B=1 to 50 If A>B Then (右クリックコピーでペペペと貼り付けるマクロ省略) End If Next B Next A こんな回答しかできません 出来上がりのイメージとかあればもうちょいマシな回答できるかも
544 名前:デフォルトの名無しさん mailto:sage [2010/06/09(水) 05:03:23 ] >>542 とりあえず質問そのままの解答だと If A > B Then ぺぺぺ だけど、条件がA>Bだけだと6*1と3*2が同じ答えで重複するし 50*50は1回しか出てこないのに条件から外れちゃうよ? いちいち調べなくても必ずA>Bになってるプログラム For B = 1 To 49 For A = B + 1 To 50 ぺぺぺ Next A Next B それから右クリックコピーってなんだ? セルに数値を入れるだけなら右クリックも貼り付けも必要ないんだが。
545 名前:デフォルトの名無しさん mailto:sage [2010/06/09(水) 09:39:29 ] Dim A&, B&, rowCnt&, colCnt& rowCnt = WorksheetFunction.Max(A,B) colCnt = WorksheetFunction.Min(A,B) もしくは If A < B Then Dim swap& swap = A A = B B = A End If ってやりたいだけか?
546 名前:デフォルトの名無しさん mailto:sage [2010/06/09(水) 16:12:47 ] Sub Hoge(inRange as Range, outRange as Range) 上記のようなインターフェースのサブルーチンがあるとします inRangeのデータに何らかの演算をしてoutRangeにコピーします このサブルーチンをワークシートの上のほうにある関数入力部分に =Hoge(A1:B2, C1:D2) のように入力したのですがうまく動いてくれません 引数付きのサブルーチンをワークシート上で手動呼び出しするにはどうすればいいんでしょうか?
547 名前:デフォルトの名無しさん mailto:sage [2010/06/09(水) 17:02:14 ] インターフェースのサブルーチン だぜ
548 名前:デフォルトの名無しさん mailto:sage [2010/06/09(水) 18:59:39 ] シート1からシート7までのb242:u242のセルをコピーして シート11のb2からb8まで順番に貼り付けるにはどうすればよろしいのでしょうか?
549 名前:デフォルトの名無しさん mailto:sage [2010/06/09(水) 19:00:27 ] シート上に CommandButton を 2 つ配置し、 それぞれ CommandButton1, CommandButton2 とします。 CommandButton1 をダブルクリックして、次のコードを書きました。 Private Sub CommandButton1_Click() CommandButton1.Enabled = False CommandButton2.Enabled = False MsgBox "now processing..." CommandButton1.Enabled = True CommandButton2.Enabled = True End Sub ここで CommandButton1 をクリックしてダイアログボックスが出ているとき、 CommandButton2 の文字が黒のままで False になっていないように見える のは、なぜですか? MsgBox の行にブレークポイントを仕掛けて CommandButton1 をクリック したときは、きちんと CommandButton2 の文字も灰色になります。 (WinXPSP3/Excel 2003)
550 名前:デフォルトの名無しさん mailto:sage [2010/06/09(水) 20:25:57 ] >>546 SubをPublic Functionにしろ。 あとワークシートにVBA記述すんな。モジュールに書け。 関数の入力のダイアログでユーザ定義関数の一覧部分に 自分の定義したFunctionが出てるか確認しろ。 以上。
551 名前:デフォルトの名無しさん [2010/06/10(木) 07:04:06 ] RS485を入出力したいのですが、RS232Cとかでよく使われるMScommを利用しようと思っています。 ところが、「ActiveXはオブジェクトを作成できません。」とエラーが出てしまいます。 RS232Cの入出力でも同様に出てしまいました。 VB6.0ランタイムはインストール済です。参照設定もしています。 どうしてでしょうか?解決策は?
552 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 07:26:00 ] >>551 oshiete.goo.ne.jp/qa/5065179.html
553 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 14:36:54 ] ワークブックXには、2つのワークシート(以下WS)があります。 ・ワークシートA(以下WSA)は日次報告の原紙が作成済み ・ワークシートB(以下WSB)の列Cには日次報告の対象となる日付(MMDD形式)が入力済み 上記の2つのシートを使い、 1.「WSA」を「WSB:C列に入っている日付の個数分作成」し、 2.1.で作成されたWSのシート名を「WSBの日次報告の対象となる日付」に変更 するというマクロはどのように組めばよいのでしょうか?
554 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 15:14:06 ] >>553 実際に操作してマクロの記録しろよ
555 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 17:21:40 ] >>553 Dim r r = 1 Do Until Sheets(2).Cells(r, 3) = "" Sheets(1).Copy After:=Sheets(2) Sheets(3).Name = Sheets(2).Cells(r, 3).Text r = r + 1 Loop シートの1枚目が原紙、2枚目が日付の入ったシートって前提な
556 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 20:11:03 ] C++とかでDLLを作ってそのDLLの関数からRangeを操作したりって出来ますか?
557 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 20:54:18 ] IDispatch::Invokeとか直接呼ぶ羽目になりそうな気もするけど、 一応可能じゃないかと。
558 名前:553 mailto:sage [2010/06/10(木) 23:26:31 ] >>552 すみません… 駆け出しなもので、余計なコードが入ってしまうと理解に時間がかかるため エディターで編集しています >>555 ありがとうございます! 少し参照するシートや列を変更してみたら、自分の環境でも動くようになりました ちなみに、こんな感じです↓ Sub ワークシートコピー() Dim r r = 1 Do Until Worksheets("日付データ").Cells(r, 9) = "" Worksheets("原紙").Copy After:=Worksheets(Worksheets.Count) ActiveSheet.Name = Worksheets("日付データ").Cells(r, 9).Text r = r + 1 Loop Application.DisplayAlerts = False Worksheets("原紙").Delete Dim p As String p = Worksheets("日付データ").Range("A6").Text Dim n As String n = Worksheets("日付データ").Range("A7").Text ActiveWorkbook.SaveAs Filename:=p & "\" & n & ".xls" Application.Quit End Sub
559 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 01:40:47 ] >>542 書いてみた Sub main() Dim C As Range Dim strC(2500, 0) As String For Each C In Range("A1:AX50") strC(C.Row * C.Column, 0) = C.Row * C.Column Next C With Range("A1:A2501") .Value = strC .RemoveDuplicates Columns:=1 End With Rows(1).Delete End Sub
560 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 07:44:47 ] 書き直した Sub main() Dim C As Range For Each C In Range("A1:AX50") Cells(C.Row * C.Column, 1) = C.Row * C.Column Next C Range("A1:A2500").RemoveDuplicates Columns:=1 End Sub
561 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 07:57:31 ] バグがあった・・・Orz Sub main() Dim C As Range For Each C In Range("A1:AX50") Cells(C.Row * C.Column, 1) = C.Row * C.Column Next C Range("A1:A2500").SpecialCells(xlCellTypeBlanks).EntireRow.Delete End Sub
562 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 09:57:55 ] Excelで勤怠表を作成する時、必ず問題になるのが、 深夜割増、早朝割増、深夜休憩、早朝休憩の計算方法だと思うんだけど、 これってVBA使わずに完全に解決してる例がみつからない。 ここまできっちりやるならVBAもしくはシステム化が普通なのかな? タイムカードは基本的には休憩時間を考慮しないし、そのへんなかなか難しいね。
563 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 11:31:45 ] >VBA使わずに完全に解決してる例がみつからない。 君の能力の問題じゃね?
564 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 12:14:02 ] > 君の能力の問題じゃね? 俺のググる能力が足りなかったのか!!
565 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 13:07:52 ] >>562 そういうの作った人が、やめちゃってわかんないから、バグとってくれって頼まれたことがある まあ、ものすごく長い式が詰め込まれとったわ VBA使わずにできなくは無いのは確かだけど VBA使えるならそのほうが圧倒的に楽
566 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 13:25:52 ] >>565 読む方からしても、関数よりVBAの方がわかりやすいってことあるよね。 うちにもExcel2003の列数の制限いっぱいまで式が詰め込んであるワークシートが 複数枚、さらに記録機能で作っただけのマクロも大量の悲惨なやつがあるんだが、 とてもじゃないが解析する気にならない。当然作った人は辞めてる。 しかも経理用のだからよくわからん。 ただ、VBAとかマクロを使わずにワークシート関数のみを駆使したシートを 作ると自己満足度が高いので、気持ち的にはわかることはわかる。
567 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 15:24:34 ] どんな就業規則なのかしらんけど、区切り時間とか計算式が変わる境界値を設定して、 一列に一個**時間を計算して、そのsum()なんかを設定値と比較して条件式なんかを 設定した方が、VBAでごちゃごちゃやるよりシンプルだと思うのは俺だけか。
568 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 15:29:44 ] おまえだけ(´ω`)
569 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 15:55:02 ] >>567 まあ、そう思うなら 区切り時間15分、夜間割り増し、深夜割り増し、早朝割り増し、休日割り増し、休憩(外出)時間分減算 こんくらいでいいから、どんだけすっきり書けるか、挑戦してみw (余力があるなら、さらに休日の夜間深夜早朝とかも入れてね) 入力はタイムカードの時間記録4個ね(出社、退社、時間内出、入)
570 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 16:15:40 ] >>567 平日の深夜早朝の手当は就業規則関係ないだろ。 >>569 休日の深夜早朝は法律には無いと思うので、 そういう就業規則があるところは羨ましいな。 やってみるとめんどくさいのがまともな勤怠表。
571 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 17:40:30 ] Excelの自動計算機能を使ってもめんどくさいのに、VBAだと簡単にできると主張する不思議
572 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 17:43:26 ] 「完全に解決してる例」が見つからないのは、その手の奴は会社ごとに異なるから 汎用性のあるものを作るのはむずかしいし、自分の会社用の奴をごりごり作ったとしても 公開しないからじゃないの?
573 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 17:47:52 ] >>562 逆にVBAじゃないと完全に解決できないと思う理由は何なの?
574 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 18:29:45 ] そりゃVBAはなくてもできるだろうけど使った方がずっと簡単 俺なら迷わずVBAを使う
575 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 19:56:22 ] >>571 エクセルの式は基本的に1行にまとめないといけないから複雑なことをするには向いてない 無理にやろうとすると大変な思いをする 大量の計算を1行に詰め込むのはプログラミング的にはクソの代表だしさw VBAならそんな制約は無いし元々そういうややこしいことをするための物だから楽にできる 使える人にとってはね 使えない人がこれから覚えてでも楽かと問われれば微妙w 使えるようになるまでが大変だから(その人のセンスしだいってとこもあるけど)
576 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 20:31:13 ] ワークシート関数では手間のかかることってのが 計算の途中経過を保存したり再利用すること 場合分けすること だから、これらの処理が必要ならVBAを使った方がいい 計算式が独立してて一つ結果が出たらそれで終わりって場合はワークシート関数でやる
577 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 20:32:34 ] ワークシート関数を激しく多重ネストして可読性を下げるくらいなら、 ユーザー定義関数をワークシートに張った方がずっと良いと思う。 マクロ有効にしたくない?知らんがな。
578 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 01:40:11 ] >>573 それを俺に聞かれても困るがな。
579 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 01:44:46 ] 俺は勤務表のカレンダーをExcel関数で作ってきたけど、カレンダー作成マクロでも組んだ方が楽だよな。 Excel関数だと無駄な同じ式を30日分入れとかにゃならんし、休日判定なんかもめんどくさい。
580 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 02:49:29 ] VBAでカレンダーを作る一番簡単な方法 ネットにアクセスしてYahooカレンダーからデータを抜き出す 祝日法が改正されてもYahooが潰れない限り全自動で対応できる
581 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 03:14:36 ] 休日は算出できんものな。 法律が出来ても変わるし、天ちゃんが死んでも変わる。
582 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 03:51:21 ] VBAってなんて文書性の高い言語なんだといまさらながら感動 ワークシートコピー() とは rは変数だよん r に1を設定 ワークシート("日付データ")のセル(r,9)が""でない限り ワークシート("原資")をワークシートコレクションの現在の個数番目の ワークシートの後に複写, 現在のシートの名前をワークシート("日付データ")のセル(r,9)に書かれている 文字列に設定, rにr+1を設定 以上繰り返し エクセルの警告表示をオフに ワークシート("原紙")を削除 pは文字列変数だよん pにワークシート("日付データ")の範囲("A6:A6")の文字列を設定 nは文字列変数だよん nにワークシート("日付データ")の範囲("A7:A7")の文字列を設定 現在のブックをp&"¥"&n&".xls"という名前で保存 エクセルを終了 わかった?
583 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 06:20:35 ] エスパーに質問。 ほとんどのPCで1分程度で終わるマクロが、あるPCだけエラーは吐かないものの数時間待ってても返ってきません。 デバッグモードに入りどこで止まっているかを見ても無限ループに入っているわけではなさそうです。 PCのスペックは同等、エクセルとVBのバージョンも一緒です。 考えられる原因はなんでしょうか?
584 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 08:14:52 ] >>580 WebAPIは基本ですよね。
585 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 08:19:08 ] >>583 on error resume next でエラーループさせてるとか。 レジストリ書き換えが上手く行って無いとか。 iniの読み込みがいつまでもtrueにならないとか。 エラー吐かない、と書いてるならば on error resume next は入れて無いよね? デバッグで止まっているなら、そこが問題なんじゃないか? do loop 使ってる? いかんせん情報が少なすぎる。
586 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 09:15:00 ] Debug.Printまみれにしてやれ。
587 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 09:51:46 ] 当然ウイルス対策ソフト切って試してるんだろうな
588 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 10:09:55 ] yahooのカレンダー取得せんでもアクセスカレンダーって使えなかったっけ あれは祝日がないのか?
589 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 13:40:59 ] >>584 Windowsのバージョンが変わった場合とか、そもそもMacが共通だとか、 環境によってはライブラリが無いとか、そういう制限て無いの?
590 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 13:42:58 ] >>588 もう祝日は数年分の祝日リストをワークシートに書いといてそれを見るようにすればいいんじゃね? 配布が簡単なところがExcel開発の良いところだし。
591 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 15:39:04 ] >>585 もうすこし詳細調べてみます >>586 おk
592 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 17:32:51 ] 祝日法はアルゴリズムそのものだからなあ 多分フリーで最新の祝日反映されたカレンダー一覧がごろごろ堕ちてるだろ
593 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 18:17:50 ] >>589 ほとんどがXML(or SGML)ファイルなので大丈夫と思うよ。 欠点はスキーマが統一化されてない事かな。
594 名前:デフォルトの名無しさん [2010/06/13(日) 11:10:35 ] 事務職レベルなのですごく初歩的な質問します。 EXCELでもACCESSでもいいんですがVBAを書くとき、 ネットとか既存のシステム?からVBAを借用してきて、自分用に編集することってあります? それとも、全部一から書きますか?
595 名前:デフォルトの名無しさん mailto:sage [2010/06/13(日) 11:59:23 ] >>594 ネットにあるサンプルを利用するのは凄く勉強になるけど、 必ず自分で手打ちする事が大切かな。 面倒かもしれないけど、コードを印刷して自分で手打ちするのと、 ただコピペして終わりにするのでは、大きな差があると思う。 自分の物にしたいなら、コード手打ちが良いよ。 もちろん1から組めるに越した事はないけどね。
596 名前:デフォルトの名無しさん mailto:sage [2010/06/13(日) 12:02:29 ] ライブラリならともかくコピーして編集って怖くね? なんかものすごいバグが紛れ込みそうで不安
597 名前:デフォルトの名無しさん mailto:sage [2010/06/13(日) 12:06:22 ] >>596 VBAのライブラリ結局生ソースだろw
598 名前:デフォルトの名無しさん mailto:sage [2010/06/13(日) 12:09:38 ] メソッドの用法を調べて、後は自分で組めるレベルまで頑張るしかない。
599 名前:デフォルトの名無しさん mailto:sage [2010/06/13(日) 12:11:40 ] >>597 ライブラリとしてまとまってるクラスや関数を使うのと 実装をいじるのでは全然違うでしょ
600 名前:デフォルトの名無しさん [2010/06/13(日) 12:20:17 ] 自分で作ったものだったら何をやってるか判ってるからそのまま流用っつーのはよくある。 ネットで拾った物は自分で、その部分のみをテストして納得したら 編集し直して使うのはある。 (変数名を自分がわかり易い名前にするとか
601 名前:デフォルトの名無しさん mailto:sage [2010/06/13(日) 12:24:10 ] プログラム書く癖ってあるじゃん。 定数化のルールとか、インデントの入れ方とか。 range("A1") で書く人もいれば、cells(1,1) で書く人もいる訳で。 そう考えると、やっぱり自分で書きなおした方が良いな。
602 名前:デフォルトの名無しさん mailto:sage [2010/06/13(日) 12:37:19 ] >>599 たいしてかわらん そのまま使えるものをコピペしてくるなら ライブラリだろうが、実装だろうが変わりないじゃん アレンジがひつようなら、やっぱりかわらんじゃん
603 名前:デフォルトの名無しさん [2010/06/13(日) 12:41:12 ] レスありがとうございます。 今まで、会社で既存のものを流用したり、ネットから一部コピーや 本に書いてるのを打ち込んだりしてました。 知識不足のため、全部自分で考えてやると時間がかかり過ぎて・・・ でも、ちゃんと覚えていくしかないですね。
604 名前:デフォルトの名無しさん [2010/06/13(日) 12:42:46 ] あ、 >>603 は594です。
605 名前:デフォルトの名無しさん mailto:sage [2010/06/13(日) 12:45:25 ] >>602 そのまま使えて、副作用もないコードならコピペでもいいかもね でもまずは副作用がないことを確認して、アレンジするなら新しい副作用が出ないように書かないといけない 規模が小さければどうって事ないが、普通これは結構な手間になり、見逃せばバグにもなる ライブラリはそういうことも実装する側が考えている(というか考えるべき)からその手間もリスクも少ない
606 名前:デフォルトの名無しさん mailto:sage [2010/06/13(日) 21:43:36 ] 特殊なアドインを自動操作する方法を検討してます。 手動でやるときは、メニューバーから選択して、一連のキー入力をするだけなんですが、 vbaでこのような処理を自動化するにはどうすればよいでしょうか? もちろん、本来はアドインのインタフェースを調べてそれを呼ぶべきなんでしょうが、 仕様がまったく不明なので、手動処理をなぞれないかと思っています。
607 名前:デフォルトの名無しさん mailto:sage [2010/06/13(日) 22:10:43 ] addinで定義されてるルーチンなり関数なりを呼び出せば良いだけでは?
608 名前:デフォルトの名無しさん mailto:sage [2010/06/14(月) 13:35:56 ] >>606 VBAじゃなくて、なんかの自動化ソフトを使ったら?
609 名前:デフォルトの名無しさん mailto:sage [2010/06/14(月) 14:31:38 ] なんで「調べてます」って書かないで「検討してます」とか書くんだろう
610 名前:デフォルトの名無しさん mailto:sage [2010/06/14(月) 14:47:14 ] >>606 決まった順番でキーを押すだけならSendKeysという命令があるけど 副作用も多いので使えるかどうかはよく検討する必要がある。
611 名前:デフォルトの名無しさん mailto:sage [2010/06/14(月) 16:20:40 ] アドイン自体を操作するのに使える?
612 名前:デフォルトの名無しさん mailto:sage [2010/06/14(月) 16:46:00 ] 参照はAddFromFile アドインもなんかなかったっけ
613 名前:デフォルトの名無しさん mailto:sage [2010/06/14(月) 16:53:05 ] あ、いやそういう意味じゃなくって、メニュー操作してアドインに制御がわたった後でも、 そのアドイン自体の操作をSendKeysでできるのかなってこと
614 名前:デフォルトの名無しさん mailto:sage [2010/06/14(月) 17:03:08 ] そのアドインが階層メニュー使ったり、ダイアログ表示したりする奴だったら、多分SnedKeysじゃ信頼性なくて 駄目だと思う。
615 名前:デフォルトの名無しさん mailto:sage [2010/06/15(火) 18:09:29 ] 今このVBAをそのまま流用して改造してるんですが、 www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_110_080.html 選んだ階層以下すべてのファイルを、特定のURLを先頭につけて抽出したいのですが、うまくいきません。 いじったのは以下のところだけですが、ファイルがある場所のみしか抽出されないのと、フルパスをうまく吐いてくれません。 (ファイルのあったディレクトリィだけ出る) どこがまずいでしょうか。 ' 現在フォルダをシート上に表示 g_cntPATH = g_cntPATH + 1 ' 参照フォルダ数を加算 FilePaths = "wwww.test.com " & FilePaths & "/" & objPATH.Name & "/" ' ■先ずサブフォルダを探索するループ処理 For Each objPATH2 In objPATH.SubFolders ' フォルダ単位のサブ処理(再帰呼び出し) Call SEARCH_SUB_FOLDER(objPATH2, GYO, COL) Next objPATH2 ' ■本フォルダの各ファイルをシート上に表示するループ処理 COL = COL + 1 ' カラムを加算 For Each objFILE In objPATH.Files g_cntFILE = g_cntFILE + 1 ' 参照ファイル数 GYO = GYO + 1 ' 行を加算 With objFILE ' ファイル名+(最終更新日時+ファイルサイズ) Cells(GYO, COL).Font.ColorIndex = 1 Cells(GYO, COL).Value = FilePaths & .Name If 25000 <= .Size Then Cells(GYO, COL).Font.ColorIndex = 3 End If
616 名前:デフォルトの名無しさん mailto:sage [2010/06/16(水) 10:05:49 ] 壊滅的に説明が下手なので、コード読む気にすらならない
617 名前:デフォルトの名無しさん mailto:sage [2010/06/16(水) 11:18:58 ] 説明は普通に読めるぞ ほるだのなかに インデックス.html ページ1.HTML とかを見つけたら、 www. ほにゃらら/インデックス.HTML って合成したいんだろう コードは見てない
618 名前:デフォルトの名無しさん mailto:sage [2010/06/16(水) 12:22:10 ] >>615 本当にそこしかいじってないんなら、変数FilePathsが宣言も初期化もされていないから フルパスが出るわけない
619 名前:デフォルトの名無しさん mailto:sage [2010/06/16(水) 14:50:43 ] > 選んだ階層以下すべてのファイルを、特定のURLを先頭につけて抽出したい 「抽出」の意味が不明。(コード見ればわかるかもしれんが) > ファイルがある場所のみしか抽出されない 「ファイルがある場所」以外は、一体どこの何を抽出したいのか? 「選んだ階層以下すべてのファイル」が対象ではないのか。
620 名前:デフォルトの名無しさん mailto:sage [2010/06/16(水) 14:57:39 ] >>618 宣言はしてあります。 ただ、全部コピペすると書き込めなかったので・・・。 >>619 そうです。その通りです。 選んだフォルダの階層以下すべてのファイルのフルパスを、 エクセル上に書き出したいんです。 今のままだと、ファイルのあるフォルダしか書き出されない上に、 そのファイルのあるフォルダよりもっと上の階層がなぜか消えてしまってるんです。
621 名前:デフォルトの名無しさん mailto:sage [2010/06/16(水) 16:04:38 ] >>620 byval と byref を間違えてるに一票
622 名前:デフォルトの名無しさん mailto:sage [2010/06/16(水) 16:06:27 ] >>615 リンク踏んだけど、そもそもそのページが読む気失せる作りだわ
623 名前:デフォルトの名無しさん mailto:sage [2010/06/16(水) 17:23:07 ] >>615 暇だったのでやてみた FilePaths をグローバルに宣言して 全体処理のほうにこれを書いて FilePaths = "wwww.test.com/ " 再帰のほうのこれを修正 FilePaths = "wwww.test.com " & FilePaths & "/" & objPATH.Name & "/" ↓ FilePaths = FilePaths & objPATH.Name & "/" で、カラム位置は別として、希望の文字列が得られてると思うが? だめなら、元のソースが壊れてると思われ、コピペからヤリナオスベシ
624 名前:デフォルトの名無しさん mailto:sage [2010/06/16(水) 17:26:37 ] >>622 ページの作りはどうでも、書いてるコードの内容が全体的にヘタクソ杉。 よくあんなの公開できるもんだと感心する。
625 名前:デフォルトの名無しさん mailto:sage [2010/06/16(水) 17:29:22 ] 参照を受け取るときにC++でいうconstみたいな指定子ってある?
626 名前:デフォルトの名無しさん mailto:sage [2010/06/16(水) 17:35:14 ] >>623 >>623 おっと、バグッテた 再帰のプロシージャの中で dim tmp しといて FilePaths = FilePaths & objPATH.Name & "/" ↓ tmp = FilePaths FilePaths = FilePaths & objPATH.Name & "/" 出口で FilePaths=tmp これでいけるわ
627 名前:デフォルトの名無しさん mailto:sage [2010/06/16(水) 17:36:08 ] >>624 悪口しかいえないやつより100万倍まし
628 名前:デフォルトの名無しさん mailto:sage [2010/06/16(水) 17:45:15 ] >>625 c++を知らないvb使いとしては、参照を受け取るときのconstの意味がわからん どういう動作なのか説明してくれたら、VBではこうだと言えるカモ
629 名前:デフォルトの名無しさん mailto:sage [2010/06/16(水) 17:53:47 ] >>628 例えば配列やクラスをディープコピーして渡すのはコストがかかるので参照で渡す けど参照で渡したときに間違って書き込みをしたくない場合につけるセーフティみたいなもんです ようするに読み取りだけできて書き込みはできない引数のことです
630 名前:デフォルトの名無しさん mailto:sage [2010/06/16(水) 17:58:39 ] >>626 あ〜そだ、グローバルで宣言したFailePathsを引きずり回してダサダサなので ソースをかっこよくしたいなら、引数のほうに入れたほうがいいね 自分でやってね
631 名前:デフォルトの名無しさん mailto:sage [2010/06/16(水) 17:59:00 ] >>629 VBAにはそういう機能はない
632 名前:デフォルトの名無しさん mailto:sage [2010/06/16(水) 18:02:08 ] >>631 しょぼん・・・どうもでした
633 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 15:48:05 ] >>626 ありがとうございました! グローバル変数の存在を思いっきり忘れてました・・・。
634 名前:デフォルトの名無しさん [2010/06/18(金) 00:58:58 ] 初心者で申し訳ありません 今A1からD10まで数字が埋まった表があります このうちB1〜B10を選択し、コピー、F1〜F10に貼り付けするとします このB1〜B10を選択するときに、直接"B1:B10""指定でなく、「表上の左から2列目、一番上から一番下までの範囲を選択」、 としたいのですが、どのように書けばよろしいのでしょうか? 表はいくつかあり、それぞれ縦のデータ数が10だったり15だったりまちまちなため、セル指定だと対応できないので困っています・・・
635 名前:デフォルトの名無しさん mailto:sage [2010/06/18(金) 01:31:16 ] >>634 「表上の左から2列目、一番上から一番下までの範囲を選択」 だと 途中に空白セルがないなら Range(Cells(1, 2), Cells(1, 2).End(xlDown)).Select とかする 個人的には好きではないけど 途中に空白セルがあった場合なんかは Range(Cells(1, 2), Cells(65536, 2).End(xlUp)).Select の方がいいかも
636 名前:デフォルトの名無しさん mailto:sage [2010/06/18(金) 01:45:50 ] >>634 B1からデータの入っているセル範囲を自動的に求めてコピー Intersect(Range("B1").CurrentRegion, Range("B:B")).Copy
637 名前:デフォルトの名無しさん mailto:sage [2010/06/18(金) 02:55:16 ] もっと単純に、 Columns("B:B").Select とか Columns(2).Select とかで良いんじゃ? んで Selection.Copy でコピーして Columns("F:F").Select でF列選択 ActiveSheet.Paste ではりつけ つかまずはマクロの記録
638 名前:デフォルトの名無しさん mailto:sage [2010/06/18(金) 15:23:29 ] >>636 こんなやり方初めて知った。 でも、空白セルがあるとそこで途切れてしまうから、結局>>635 のほうがいいのかな。 65536って入力するより、rows.countのほうがいいだろうけど。
639 名前:デフォルトの名無しさん mailto:sage [2010/06/18(金) 16:22:57 ] B列全体をコピーしてもいいのかどうか。空白セルをコピーすると何かまずいことがあるのか。 途中に空白が入ってデータが飛び飛びになることはあるのか。 このあたりが条件として欲しいところだな。 それによって手間や方法が変わってくる。
640 名前:634 [2010/06/18(金) 20:50:20 ] みなさんさまざまなアイディア、ありがとうございました 以下のように組むことで、一応目的達成することができました ActiveCell.CurrentRegion.Select Selection.Offset(0, 0).Columns(2).Copy ActiveCell.Offset(0, 5).Select ActiveSheet.Paste
641 名前:デフォルトの名無しさん mailto:sage [2010/06/18(金) 21:11:18 ] >>640 それでいいんなら1行にまとまるよ ActiveCell.CurrentRegion.Columns(2).Copy Destination:=ActiveCell.Offset(0, 5)
642 名前:デフォルトの名無しさん mailto:sage [2010/06/18(金) 21:12:41 ] >>634 セレクトしてる意味がない これで充分 Columns(2).Copy Columns(2).Offset(0, 5).PasteSpecial
643 名前:デフォルトの名無しさん mailto:sage [2010/06/19(土) 23:28:29 ] zip 内のファイル一覧を取得したいのですが、 サンプルが見つからなくて何とか以下のようなものはできました。 どこか問題はないでしょうか?とくに item.GetFolder が正規のメソッドとして 存在するのかが気になっています。 また、Folder3、FolderItem2のリファレンスはありますでしょうか? Option Explicit Dim m_fso Dim m_shell Sub main() Set m_fso = CreateObject("Scripting.FileSystemObject") Set m_shell = CreateObject("Shell.Application") ZipList "c:\test.zip" End Sub Function ZipList(FileName As String) Dim folder Set folder = m_shell.Namespace("c:\test.zip") ZipListSub folder End Function Function ZipListSub(folder As Variant, Optional path As String = "") Dim item For Each item In folder.Items If item.IsFolder Then ZipListSub item.GetFolder, item.path & "/" Else Debug.Print path & item End If Next End Function
644 名前:デフォルトの名無しさん mailto:sage [2010/06/20(日) 00:37:34 ] >>643 とりあえず、Shell.Application絡みのドキュメントはここ。 msdn.microsoft.com/en-us/library/bb773938 (v=VS.85).aspx FolderItem2はShellFolderItemとしてエイリアスされている。 Folder3のヘルプは見つからないな。 更に詳細が知りたければ、参照設定で「Microsoft Shell Controls And Automation」を足すと、 大本のタイプライブラリの内容が確認できる。Folder3は一応ここに出てくる。 WindowsSDK等に付属している「OLE/COM Object Viewer」で 「Type Libraries」-「Microsoft Shell Controls And Automation (Ver 1.0)」を表示させれば、 FolderItem2のエイリアスとかまで確認できるな。
645 名前:デフォルトの名無しさん mailto:sage [2010/06/20(日) 13:06:43 ] >>643 それ以前に.ZIPがShellで処理される保障はないと思うがそれはいいのか? つかエクセル関係ないからスレ違い テンプレなくなってるんだな
646 名前:デフォルトの名無しさん mailto:sage [2010/06/21(月) 16:48:15 ] zipがshellで処理されないOSって何?
647 名前:デフォルトの名無しさん mailto:sage [2010/06/21(月) 16:57:59 ] 2000とか98,98SEとか
648 名前:デフォルトの名無しさん mailto:sage [2010/06/21(月) 18:29:27 ] >> 647 Windows 3.1+Excel 5.0の考慮も必要だね!
649 名前:デフォルトの名無しさん mailto:sage [2010/06/21(月) 20:57:02 ] Windows8とか
650 名前:デフォルトの名無しさん mailto:sage [2010/06/21(月) 21:38:02 ] >>643 × Set folder = m_shell.Namespace("c:\test.zip") ○ Set folder = m_shell.Namespace(FileName)
651 名前:643 mailto:sage [2010/06/21(月) 23:37:34 ] >644 ありがとうございます。 残念ながら英語版しかないようですね。 >645 zipfldr.dllが解除されている場合とかでしょうか? >650 テストしたのをそのままあげてしまいました。 そこですが、fso.GetAbsolutePathName で取得したものを 渡さないと時々取得できないことがあるようです。 原因はさっぱりわかりません。
652 名前:デフォルトの名無しさん mailto:sage [2010/06/22(火) 14:36:04 ] >そこですが、fso.GetAbsolutePathName で取得したものを >渡さないと時々取得できないことがあるようです。 >原因はさっぱりわかりません。 なぜだろうね
653 名前:デフォルトの名無しさん mailto:sage [2010/06/22(火) 14:46:04 ] AbsolutePathNameじゃないからだろ
654 名前:デフォルトの名無しさん mailto:sage [2010/06/22(火) 17:02:02 ] >>652 どっかいけ、アホ
655 名前:デフォルトの名無しさん mailto:sage [2010/06/22(火) 22:46:43 ] Stringで渡すとだめで、VariantならOKのようです。
656 名前:デフォルトの名無しさん mailto:sage [2010/06/22(火) 23:17:45 ] Set folder = m_shell.Namespace((FileName))
657 名前:デフォルトの名無しさん mailto:sage [2010/06/22(火) 23:35:53 ] それは意味ない
658 名前:デフォルトの名無しさん mailto:sage [2010/06/23(水) 19:22:11 ] 意味あったけど
659 名前:デフォルトの名無しさん [2010/06/24(木) 19:49:57 ] 初心者なんですが、皆さんの力を貸してください。 下記で困ってます。orz 【実現したいこと】 ワークシートにグラフを追加し グラフのX軸の目盛位置(wkChart.Axes(xlCategory).Left)ピッタリに四角シェイプを配置したい。 配置先は、グラフ内ではなくワークシート上。 【多分必要だと思うこと】 グラフ内の座標から、ワークシートの座標に変換する必要がある? 【試したこと】 グラフ内の座標==ワークシート上の座標でシェイプを追加したにもかかわらず 見た目上ズレている。 【コード】 'チャート内に四角シェイプを追加して選択 wkChart.Shapes.AddShape(msoShapeRectangle, 30, 100, 20, 30).Select 'ワークシート上に四角シェイプを追加して選択 ActiveSheet.Shapes.AddShape(msoShapeRectangle, 30, 100, 20, 30).Select
660 名前:デフォルトの名無しさん mailto:sage [2010/06/25(金) 18:42:58 ] APIで座標を調べるのがあったな。
661 名前:デフォルトの名無しさん mailto:sage [2010/06/25(金) 22:56:29 ] >>659 グラフ内の座標ってChart自体の (0, 0) から始まるわけじゃなかったような気がするけど、ひょっとしてそのこと? wkChart.Shapes.AddShape(msoShapeRectangle, 30-wkChart.ChartArea.Left, 100-wkChart.ChartAreaTop, 20, 30).Select ActiveSheet.Shapes.AddShape(msoShapeRectangle, 30, 100, 20, 30).Select
662 名前:デフォルトの名無しさん mailto:sage [2010/06/26(土) 23:30:08 ] >>659 A1セルの大きさが基準になる。手順は以下。これで、(10,10)セルにグラフを移動とか出来る。 但し、全セルが同じ大きさであることが重要。 詳細は忘れたから調べてwww @A1セルの大きさを変更 or 全セルの大きさを整える AA1セルの縦横サイズを取得 B座標位置(左上位置になる)を指定する
663 名前:662 mailto:sage [2010/06/26(土) 23:33:24 ] すまん。グラフの位置決めのことで、チャート内ではない。 まじすまそ
664 名前:デフォルトの名無しさん [2010/06/27(日) 01:30:22 ] 正規表現で置換するだけの処理なんですが上手くいきません ご教授願います Sub sample01() Dim re As Object, n As Object Dim Match As Object, Matches As Object Dim Val As Variant '配列 Dim i As Integer 'カウンタ Val = Worksheets("Sheet1").Range("A1:A5").Value Set re = CreateObject("VBScript.RegExp") For i = 1 To 5 Step 1 MsgBox "対象セルの文字列は" & "【" & Val(i, 1) & "】" re.Pattern = "\d{1}" '検索する正規表現パターン re.Global = True '検索範囲はグローバル re.IgnoreCase = True '大文字・小文字を区別する Set Matches = re.Execute(Val(i, 1)) '■HITしたらああああに置換↓ここが上手く動いてくれない■ Val(i, 1) = re.Replace(Val(i, 1), "ああああ" & i) 'Set re = Nothing Next i MsgBox i - 1 & "件マッチ!" End Sub
665 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 02:03:45 ] >>664 動いてますよ? もしかして、ワークシートに書き込みたいのなら Range("A1:A5") = Val を最後に足しとけばOKかと
666 名前:664 [2010/06/27(日) 02:07:06 ] >>664 だけでは説明不足だったので付け加えます ソースの置換処理内容だけ見るとわざわざVBAでやる必要ない感じですが 実際は複雑な正規表現処理を入れる予定です 上記ソースよりも簡単に指定したセルを正規表現で置換できる処理がありましたら、 合わせてご教授頂ければと思います
667 名前:デフォルトの名無しさん [2010/06/27(日) 02:24:08 ] >>665 おっしゃる通りでした Range("A1:A5").Value = Val でワークシートに置換した値が入りました ありがとうございました!
668 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 09:36:01 ] 所で、forのループ外で宣言している re をループ内で開放しちゃってるけど大丈夫?
669 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 10:12:08 ] あ、コメントアウトされてたのね。 老婆心ながら、setしたobject型変数は最後に開放しておいた方がいいよ。 end subのすぐ前でOK。
670 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 14:23:54 ] >>老婆心ながら、setしたobject型変数は最後に開放しておいた方がいいよ。 なんで? 不要だろ
671 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 14:25:52 ] ここから先しばらく不毛な論争が続きますので質問者の方は無視してくださいな
672 名前:664 [2010/06/27(日) 15:51:40 ] Set re = Nothingを入れる事でメモリ解放するって事ですかね? 個人的にはそんな事より"A1:A5"の範囲ならまだしも セル範囲が増えた場合オーバーフローしないか心配です 何か良い方法ないですかねぇ 配列を使わずにセル範囲を一つ一つループで置換orスルーできるような処理があれば1番なんですが
673 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 15:55:12 ] >>669 完全に不要。 あと、解放、な。
674 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 15:56:56 ] >>672 何がどうオーバーフローするんだ?
675 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 16:06:12 ] Nothing入れないと自動変数の領域がキャッシュされてるため いつまでもオブジェクトが削除されないとかVB.netで聞いた事ある
676 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 16:12:26 ] .NETからExcelを操作した時のアウトプロセス解放関連の話と 勘違いしている予感。
677 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 16:23:59 ] COMのGCって参照カウンタでしょ。 それに反しなければわざわざリリースなんて要らん。
678 名前:672 [2010/06/27(日) 16:26:01 ] >>674 ちょっとまだ試行中なのですが、例えば配列数を膨大な数にした場合や 各配列内のデータ(取得したセルの値)、文字数が多い場合等です Variant型を超える事はないと思ってはいますが、 少し今のやり方だと心配なんですよね
679 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 16:41:37 ] >>675 キャッシュ(笑) VB.net(笑) 適当なこと言ってんなハゲ
680 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 17:51:36 ] 「行儀が悪い」 これならどうだ
681 名前:デフォルトの名無しさん [2010/06/27(日) 18:46:33 ] 煽りとかでは無くて純粋に教えてほしいんだけど、 setした物はnothingにして終わらせる、って教わったんだ。 当時聞いた話では、メモリを占有し続けるからって感じで納得してたんだけど、 これは嘘なのかな? マナーとしてnothingを代入してやるのか、それとも技術的な理由があるのか、それが知りたい。 nothing入れてやる必要が無いなら、余計なコード書きたくないし、教えてください。
682 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 19:41:25 ] >メモリを占有し続けるから これは嘘ではない
683 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 19:49:31 ] nothingを代入しなくて、その変数が生きていれば、メモリが開放されることはない nothingを代入しても、そのメモリがいつ開放されるかは定かではない nothingを代入しなくても、その変数が無効になれば、その領域は自動的に開放される 原則はこういうこと 昔は使い終わったらすぐにnothing代入して、開放可能にしましょうってのが主流だった 今は特殊なオブジェクトでもない限り、あんまり気にしなくていいと思うぞ
684 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 19:57:09 ] テンプレに書いてくれ 無駄なもの 最後にnothing 最後にerase とか 他にもあるんだろうけど
685 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 20:09:26 ] >>682-683 ありがとう。 俺、後輩にいつもnothingで終わらせろって言ってた・・・。 先輩の指導を鵜呑みにして、自分で調べなかったのが凄く恥ずかしい。 nothing忘れると、先輩が口を酸っぱくして指摘してたんで、そうと信じてた。 >nothingを代入しなくても、その変数が無効になれば、その領域は自動的に開放される VBAの場合はend subを通った時点でdimが無効になるから、基本的にはset nothingいらないのかぁ・・・。 本当にありがとう。
686 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 20:53:29 ] SQLServerのJOBにActiveXスクリプト書くときは Nothingしないと警告でるよ
687 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 21:21:13 ] そういや、fjのmalloc/free論争はどう決着したんだっけなあ
688 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 21:38:02 ] >>685 俺は無駄なNothing代入はいらない派だが、またそうやって人の言うこと鵜呑みにするなよ? VBAは参照カウント方式だから、参照がなくなった時点で自動的に解放されるが、 循環参照(オブジェクトAとBがお互いの参照を保持しちゃってるような場合)があるときは 明示的に解放してやらないとメモリリークする とりあえずNothingで終わらせておけば問題は発生しないし思考停止できる、というのも一つの考え方ではある
689 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 23:43:38 ] 俺も無駄なNothing代入はいらない派だが >>688 メモリリークといっても、エクセルの使用メモリが増えていくだけで エクセルを終了させれば開放される >Nothingで終わらせておけば問題は発生しないし思考停止できる ちなみに変数をNothingにしてもメモリリークは防げないこともある Sub test() Set x = CreateObject("Scripting.Dictionary") Set y = CreateObject("Scripting.Dictionary") Call x.Add("y", y) Call y.Add("x", x) Set x = Nothing Set y = Nothing End Sub このプロシジャ呼ぶとちょっとずつメモリ使用量が増加していくぞ
690 名前:デフォルトの名無しさん mailto:sage [2010/06/28(月) 00:31:57 ] だからさあ、いらないって言うやつは自分が作るときに使わなきゃいい いるってやつは自分が作るときに使えばいい わざわざ他人のコーディングを否定すんなよクズども いい加減この無限ループやめろっての ここまでテンプレ
691 名前:デフォルトの名無しさん mailto:sage [2010/06/28(月) 01:10:01 ] 質問スレだから 質問されたら答えるだけ 間違いを教えていいわけない 結論はどっちでもいいと答えるのかもしれないけど
692 名前:デフォルトの名無しさん [2010/06/28(月) 09:06:38 ] 全角英数字を半角英数字にする関数ってありますか? Case文で全文字毎に置換するしかないですかね?
693 名前:デフォルトの名無しさん mailto:sage [2010/06/28(月) 09:34:12 ] >>692 つ素寅昆布
694 名前:デフォルトの名無しさん mailto:sage [2010/06/28(月) 09:34:31 ] はいいえ
695 名前:デフォルトの名無しさん [2010/06/28(月) 11:02:28 ] >>693 まんこの中見る器具!
696 名前:デフォルトの名無しさん mailto:sage [2010/06/28(月) 11:40:42 ] >>692 記号もカナも、半角に変換できる文字は全部変換してもいいんならStrconv 英数以外は変換したくないんなら1文字ずつやるしかない
697 名前:デフォルトの名無しさん mailto:sage [2010/06/28(月) 15:54:16 ] 相互参照になった場合は?
698 名前:デフォルトの名無しさん mailto:sage [2010/06/28(月) 17:29:18 ] >>696 つ性器豹源