10/04/15 01:11:01
>>1乙です
3:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/04/15 08:38:37
このIF文実行できんの?
5:デフォルトの名無しさん
10/04/15 08:57:49
で、どう動かないの?
イベントはあるんだっけ?
まぁあったとして、それじゃあマウスの移動速度依存だよ
.netなら入ってきた、出ていったイベント使えるけど。
だから他のコントロールと連携してマウスの動きを監視するとかしないと期待する結果とはならないです。
オレだったらそのイベント1秒後にAPIでマウス座標取るようにするかな、OnTimeで。
6:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/04/15 12:48:45
わずか数ドットの範囲をチェックする方法だと、マウスを速く動かすとイベントがうまく発生しないよ
8:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/04/15 13:45:50
>>8
VBAでは無理。ずらっと並べて書くしかない。VBだとまとめられるんだけどねえ。
10:デフォルトの名無しさん
10/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と結びつき 有効(実体化)となります。
参考にしたサイト
URLリンク(oshiete.homes.jp)
11:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/04/16 02:10:40
前スレで出てたけど、予約後の先頭を大文字にしない方法は一応ある。
たとえばIfをifにしたい時はdim if [Enter]と入力してからこの行を消去する。
そうするとエディタが一時的に「if」というキーワードを記憶してくれる。
とても実用的な方法ではないけどね。
14:デフォルトの名無しさん
10/04/16 09:20:24
(5)編集コマンドバーに、複数行をコメントにする機能ならあるけど
15:デフォルトの名無しさん
10/04/16 10:08:39
>>12-14
みなさん、ありがとうございます。よくわかりました。
慣れるしかないって感じですね。
エディタのツール→オプション→編集のところに「変数の宣言を強制する」というチェックボックスがありました。
これは、>>12のご回答「(3) モジュールの先頭にOption Explicitと書く 」と
同じ効果がありそうな、感じがします。
>VBAである必要性がないのならVBを使った方がいい。
VBにすると、私の質問の多くが解決されそうでしょうか?
特にTABの保持が実現できるなら、VB買おうかなと思います。
アプリを1から作るためのVBではなく、
トレース実行など、現在のVBAのようにExcelとの連携が密にできて、
Excel付属のVBAの使いにくさが解決できるなら、ぜひ買いたいです。
16:デフォルトの名無しさん
10/04/16 10:38:47
(5)について
ご希望のとは違うし、これが2000でも使えるかどうかは知らんけど
VBEのコードを簡単にコメントブロックする方法
URLリンク(officetanaka.net)
17:デフォルトの名無しさん
10/04/16 11:48:08
>>16
うぉーーー、これは便利です。
さっそく取り入れました。キーボードから手が離れないのが素晴らしいです。
これはいいです。ありがとうございました。すばらしい。
ちなみに、初心者質問させてください。
C言語などで言う「#include "hoge.c"」のような、ソースファイル組み込みは
VBAでできるでしょうか?
単にその位置に別ファイルのソースを挿入するだけの機能です。
1つのボタンでの処理が長くなってきたので、別ファイルに分割したいと思っています。
subにしてもよいのですが、変数をpublicで宣言したりとか、結構手間そうなので。
includeというキーワードで検索したのですが、見つけられませんでした。
18:デフォルトの名無しさん
10/04/16 12:01:05
そもそも#include "hoge.c"とかやるのが筋が悪い
19:デフォルトの名無しさん
10/04/16 12:09:50
17です。
すごいページを見つけましたので、貼っておきます。
URLリンク(www.ne.jp)
こういうのが欲しかった、みたいな。素晴らしいページです。
このページに依れば、VBAには、#includeは無いみたいです。
ありがとうございました。
>そもそも#include "hoge.c"とかやるのが筋が悪い
そうなんですけど、
関数化で階層化すると、スタックの待避や復元などのオーバーヘッド時間で
処理が遅くなることもあるので、1関数内に書いてしまう私です。すみません。
20:デフォルトの名無しさん
10/04/16 12:43:52
アホか
21:デフォルトの名無しさん
10/04/16 13:22:40
関数呼び出し程度のオーバーヘッドが嫌なのに、VBやVBA使うの?
22:デフォルトの名無しさん
10/04/16 13:29:37
すみません。組み込み屋なので、マイコンのときは気にしてしまいます。
エクセルはPCなので関係ありませんが、
記述スタイルを踏襲したいんです。
23:デフォルトの名無しさん
10/04/16 14:22:26
頭固すぎw
24:デフォルトの名無しさん
10/04/16 14:26:57
コボラーがJavaやるみたいなもんか
25:デフォルトの名無しさん
10/04/16 15:25:52
(;゚д゚)ァ
26:デフォルトの名無しさん
10/04/16 16:31:15
だめだこりゃ
27:デフォルトの名無しさん
10/04/16 16:54:02
言語仕様や開発環境の違いをいちいち気にしてたら仕事にならない。適応力を試されてると考えるんだ。
複数の環境を使い分けられない人間はプログラマーをやる資格がない。
28:デフォルトの名無しさん
10/04/16 22:25:21
最近打ち合わせでは分かり切ったことは飛ばして話を進めているのに
知識として持っててあたりまえのことを質問する馬鹿が増えた
29:デフォルトの名無しさん
10/04/17 13:12:27
TABの保持にこだわる理由が分からん
変数の宣言位置を揃える古臭い書き方でもしてるのか?
30:デフォルトの名無しさん
10/04/17 13:18:02
むしろ半角スペースになった方が揃うでしょ
31:デフォルトの名無しさん
10/04/17 13:18:44
どんなエディタで見ても、ね
もちろん固定幅フォントにする必要はあるが
32:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/04/17 20:00:25
VBAを捨てる
34:デフォルトの名無しさん
10/04/17 20:03:15
説明がよくわからないのでその.xlsをうpしてください
35:デフォルトの名無しさん
10/04/17 20:46:39
>>32
その説明では状況がまったくわからないので答えようがない
36:デフォルトの名無しさん
10/04/17 22:03:54
withsheet2で
37:デフォルトの名無しさん
10/04/17 22:05:30
>>32
range("A1").value = hogehoge
のコードもsheet1にあったりする?
この状況だと対策は
Rangeへ シート指定する
or
コードを標準モジュールに戻す
38:デフォルトの名無しさん
10/04/17 23:47:36
>>32
それぞれのモジュールで
MsgBox Range("a1").WorkSheet.Nameとしてみな。
39:デフォルトの名無しさん
10/04/18 01:39:24
>>29
>TABの保持にこだわる理由が分からん
キミにはわからないだろうな、きっと。
40:1/2
10/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
10/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
10/04/18 02:11:21
なお、一から書き直した方が作りやすい場合は、
私の記述を元にせずに、そちらを書いて下さい。
43:デフォルトの名無しさん
10/04/18 02:16:37
無駄な記述が多すぎ
一から書き直した方が作りやすい
おまえに書いてやったら何かくれるなら書いてやらんでもない
44:デフォルトの名無しさん
10/04/18 02:25:42
問題をプログラムに埋め込むな
せっかくExcel使ってるんだから
問題文と正解・不正解を
シートに記述出来るように汁
45:デフォルトの名無しさん
10/04/18 08:17:25
>>40
そのままでも100や200なら大して遅くはなりませんから安心して下さい。
丸写しは感心しないので、まずは二択のプログラムを作ってみせてください。
二択の問題の例
問題 本能寺の変を起こしたのは誰か?aかbで答えなさい。
選択肢 a.明智光秀、b.豊臣秀吉
解答 ( )
46:デフォルトの名無しさん
10/04/18 09:00:20
b
47:デフォルトの名無しさん
10/04/18 09:05:52
c 織田信長
48:デフォルトの名無しさん
10/04/18 09:09:57
俺をaとかbとか記号で呼ぶな
49:デフォルトの名無しさん
10/04/18 09:51:25
d. 徳川家康
e. 千利休
f. 柴田勝家
50:デフォルトの名無しさん
10/04/18 22:19:22
かなり既出であれば申し訳ありません
VBAでPDFファイルを作成したいのですが,以下の件で困っています
・ファイル名,出力先フォルダを指定できない
1,2回であれば,手作業でもかまわないのですが,
各事業所毎に出力するため30回ちかく保存先ダイアログが出る度に
ファイル名を入力して保存しています。
PCにはAcrobat,クロセPDF2などがインストールされています。
よろしくご指導ください。
51:1/2
10/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
10/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:デフォルトの名無しさん
10/04/19 01:12:36
クロセPDF2は使用禁止です
54:デフォルトの名無しさん
10/04/19 02:00:16
× クロセ
○ クセロ
55:デフォルトの名無しさん
10/04/19 02:02:42
>>50
出力する方法はたくさんありますし、何もかも説明するのは不可能です。
今はどんなマクロで出力していますか。保存の部分を書いて下さい。
たぶん少し修正するだけで自動化できる可能性があります。
56:デフォルトの名無しさん
10/04/19 02:40:55
>>51
その方法だと、三択の時は解答がE列、四択だと解答がF列になってしまいます。
目的(この場合は解答)が同じセルは同じ列にまとまるようにすれば、
プログラムを作る手間が少なくなります。もう一工夫しましょう。
57:デフォルトの名無しさん
10/04/20 08:41:10
Invoke()は使えますか?またはその代替
58:デフォルトの名無しさん
10/04/20 20:12:19
IDispatch::Invokeなら、遅延バインディングしてれば内部で勝手に使うだろ。
59:デフォルトの名無しさん
10/04/21 00:33:10
>>56
なるほど。
つまり、A列が問題としたらB列を解答として、
数が可変な選択肢は最後の方の列に羅列した方がいいというおとですね。
60:デフォルトの名無しさん
10/04/21 14:39:31
質問です
VBAのFSOを使ってファイルを抽出
データのファイル名や最終アクセス日などリスト化
ここまではできたのですが指定した日付より
前のアクセス日時のものをほかの列にリスト化するということが
できません、どなたか教えて頂けませんか?
61:デフォルトの名無しさん
10/04/21 14:49:42
それはご愁傷様です
62:デフォルトの名無しさん
10/04/21 15:54:34
オートフィルタ→コピー
63:たろう
10/04/21 19:32:46
テキストボックスの設定でコンボボタンをクリックしたらテキストぼっくっすの数値をシート1のA列に記入しなさい
とまではわかったのですがテキストボックスが空白の時にデバックがかかってしまうのですが
どうやればかいひできますか?
64:デフォルトの名無しさん
10/04/21 19:36:27
テキストボックスが空白の時にテキストぼっくっすの数値をシート1のA列に記入しないようにすればいいよ
65:たろう
10/04/21 19:36:52
どうすればいいですか?
66:デフォルトの名無しさん
10/04/21 20:56:33
そんな初歩的な・・・。
67:デフォルトの名無しさん
10/04/21 22:47:15
文字列をひっくり返す関数下さい
in→あいうえお
out→おえうあい
こんな感じのです
68:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/04/22 14:42:20
ageさせてください!
72:デフォルトの名無しさん
10/04/22 15:07:34
>>70
条件が「取り扱いに困るほど大きい」では計算ができません。
いくつ以下、と具体的な数字で示して下さい。
73:デフォルトの名無しさん
10/04/22 15:15:59
>>67-69
Mid statementを使えば、For i=1 To Len(s)/2でできるだろ
74:デフォルトの名無しさん
10/04/22 15:20:17
>>70
10足分入るカートンと、12足分入るカートンの2種類があって
最適な組み合わせを調べたいってこと?
75:デフォルトの名無しさん
10/04/22 15:22:28
>>72
商品によって変わるので一概に言えません。
(例としては靴の場合で10-20足入としました)
とりあえず変数で示して頂ければ幸いです。
実務上では品目ごとにを許容範囲を設定し、参照する形にしたいと思います。
76:デフォルトの名無しさん
10/04/22 15:30:54
>>74
全数を最小の種類のカートンで出荷するには、何足入と何足入のカートンを用意すればいいのか?
ということを調べたいのです。
例では、
10足入の場合は、他に12足入と18足入の合計3種類カートンを作らなくてならないのに対し、
12足入では12足入と10足入の2種類で済むので効率的です。
実際は取引先も扱い商品も多数あり、いちいち考えるのが大変なので、
自動で最適結果を出したいと思っています。
77:デフォルトの名無しさん
10/04/22 15:51:37
素因数分解と最大公約数がミソだが
カートン候補がありすぎるとプログラムも大変だな
78:デフォルトの名無しさん
10/04/22 16:06:33
まず4C2で6通りの最大公約数を求める
① この6つの公約数を見比べて、標準カートン10前後の奴の数が多い奴で1つ確定
30とか40とか大きくなったら10にするような処理が必要
それでまず2店舗~4店舗が確定
残りの2店舗で割り切れない場合
② その2店舗の最大公約数があればそれでもう1種確定
それがなければ
③ ①の確定カートンで割った余りを求め、その余り2つに公約数があれば確定
それもなければ
④ ③の商から1減らしてあまりを求め(つか、さっきの余りに①をプラスして)、その2つに公約数があれば確定
①で、標準カートンに近いものがない場合(2とか3とかにしかならない)
強引にカートンを10にしてしまい③から以下を4店舗分繰り返す
79:デフォルトの名無しさん
10/04/22 16:10:07
仰るとおり、因数分解と公約数だな、と思ったのですが、
これが中々難しくて・・・
アタマが痛くなってきてしまいましたw
80:デフォルトの名無しさん
10/04/22 16:16:31
店舗Eの発注が9足だった場合、許容範囲を9~に下げて
そして9個いりのカートンは使うってことなのかな?
81:デフォルトの名無しさん
10/04/22 16:24:02
力づくで計算したらいいのに
For K=カートン最小値 To カートン最大値
S=必要数(K)
If S > 暫定必要数 Then S = 暫定必要数
Next
82:デフォルトの名無しさん
10/04/22 16:32:03
>>80
1つ違うくらいならそうしたいですが、大幅に違う場合は例外として扱うことになると思います。
(1000-5000個が適用範囲の商品に、15個の発注が来た場合など)
ただ、実際にはあまり少量のオーダーは受けないので無視して良い事例かと思います。
>>78
ちょっとイメージできないので考えさせてください・・
皆さんありがとうございますm(_ _)m
83:デフォルトの名無しさん
10/04/22 16:38:46
VBAに関係ないことになると嬉々としてレスする奴がいるよな
84:デフォルトの名無しさん
10/04/22 16:39:33
単純に
下1桁が2の倍数なら、12カートンを(1桁/2)個用意すれば、残りは10カートンで済む
どうせ奇数はないんでしょ?あっても繰り上げすれば済む
結論
全て12と10のカートンでおk
85:デフォルトの名無しさん
10/04/22 17:02:46
>>84
すみません。カートン総数も減らしたいので出来るだけ多くパッキングしたカートンを基本にしたいのです。
書いてなかったですね。申し訳ない。
奇数もありますが、ご指摘のとおり繰上げ処理でも問題ないです。
なんかスレ違いな気がしてきたので、もうちょっと考えてみますねw
スレ汚し失礼しましたm(_ _)m
86:デフォルトの名無しさん
10/04/22 17:04:14
↑
この書き込みの意図がわかりません
87:デフォルトの名無しさん
10/04/22 17:32:08
端数を切り上げてもいいんなら、12個入りのカートン1種類だけでいいじゃん
なんか条件が曖昧すぎるよ
コンピューターのプログラムってのは、もっと厳密に数字が決まってなきゃ作れないんだよ
条件が色々あるんなら、そのすべてをリストアップするか、法則を決める必要がある
88:デフォルトの名無しさん
10/04/22 17:38:18
1カートン1個なら端数は出ないし1種類で済む
それでは困る場合は、「1カートンは最低でも何個以上にするか」「カートンは何種類以下に抑えたいか」
「端数がいくつまでなら切り上げ可能か」のような数字を商品ごとにすべて決めてデータベース化しないと。
89:デフォルトの名無しさん
10/04/22 18:00:49
>>85
商品別にカートンと個の間に、もう1つ数量の単位(組とか)を設定する。
上記例の靴だったら2個=1組
適用範囲1000~5000個のものだったら200個=1組 みたいなかんじ。
組数以下の端数は1組として切り上げる。
こういう設定でできないかな?
90:デフォルトの名無しさん
10/04/22 18:28:59
エクセルが高くて買えないんですけど、タダで勉強するにはどうすればいいんでしょうか?
91:デフォルトの名無しさん
10/04/22 18:32:01
>>90
openoffice
92:デフォルトの名無しさん
10/04/22 18:32:38
>>90
URLリンク(msdn.microsoft.com)(v=VS.100).aspx
93:デフォルトの名無しさん
10/04/22 18:33:43
体験版
URLリンク(www.forest.impress.co.jp)
94:デフォルトの名無しさん
10/04/22 19:43:39
勉強するだけなら買わなくてもいいだろ
ネットの解説サイトを見て回ってればいい
実際に使いたいなら>>91-93
95:デフォルトの名無しさん
10/04/22 22:15:02
どうもありがとうございます!
タダでずっと使えそうなOPENOFFICEで頑張りたいと思います
96:デフォルトの名無しさん
10/04/22 23:48:31
コードを"ゴリゴリ書く"ってよく言うけど、
これってVBAにも当てはまると思う?
Cやアセンブラならゴリゴリが似合うけど、
VBAならベタベタとか、ポロポロとかの方が
似合う気がするんだけど。
97:デフォルトの名無しさん
10/04/23 03:52:47
>>96
ゴリゴリ書くって表現は、処理の根幹部分で既存のライブラリに頼らないとか、
規模が大きかったり開発期間が短い場合に使うものだから、言語の違いは直接は関係ない。
けど、VBAはOfficeの特定の作業を自動化するのが目的の言語だから、
関数を数個書いて終わるケースが大半を占める。「ゴリゴリ書く」ことも少ないだろうね。
たまに大規模なアプリをVBAで作っちゃう人もいるけど、それはVBを使った場合にくらべて
開発効率や処理効率が悪いことがほとんど。
98:デフォルトの名無しさん
10/04/23 04:04:01
すべてのヘルプを読んでから質問するように
99:デフォルトの名無しさん
10/04/23 07:06:09
VBA初心者です
この言語にはポインタみたいなのはないんでしょうか?
リンクリストとかのデータ構造はどうやって実装しているんですか?
100:デフォルトの名無しさん
10/04/23 07:42:43
>>99
ポインタ型はありません。
リスト構造も標準では用意されていないので、実装はプログラマー依存です。
単なる整数型のインデックスと配列の組み合わせで実現することが多いと思います。
101:デフォルトの名無しさん
10/04/23 09:46:20
>>97
どうもありがとう。
ゴリゴリってそういう意味があったんですね。
知りませんでした。
ちょっとしたネタのつもりが良レスもらって感謝です。
102:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/04/23 13:09:52
期待通りに動いていないんだから
どうみても勘違いです
ほんとうにありがとうございました
104:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/04/23 13:56:25
マクロはときどき壊れるからなぁ
最後に正常に動いていたときの
バックアップを取るのは必定
106:デフォルトの名無しさん
10/04/23 17:02:38
>>104
追試、ありがとうございます。そうですか、動きますか。
もう一度やってみたのですが、僕の場合は動きませんでした。
hoge2関数の処理時間が3秒程度と長いので、
ボタンの色を変えて処理中であることを示したいのです。
しかし自身のボタン色ではなくて、他のボタン色を操作します。
もしかしたら他のボタンのことは操作できないのかと思っていました。
ボタン色の指示行の間に入れた関数処理自身は
正しく実行されるのですが、
指示したボタンの色がまったく変化しません。
まるで「どのみち元の色になるんだから、色を変えるのは省略します」と
言っているみたいです。
107:デフォルトの名無しさん
10/04/23 17:04:05
>>102
単に関数2が一瞬で終わってるだけじゃないか?
108:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/04/23 17:17:37
doeventはさんでみるとか?
110:デフォルトの名無しさん
10/04/23 17:31:05
ホンとだ
間に処理かますと処理後の色変更しかしやがらねー
111:デフォルトの名無しさん
10/04/23 17:51:22
みなさん、いろいろ試してくれて、ありがとうございます。
僕は、以前に作ったExcelブックを使い回していて、必要に応じてボタンをcopyしたりして使っています。
なので自分で新規にボタンを作ったことがありません。
調べてみると、僕の使っているボタンは「オートシェープ」という部品のようです。
ボタンとオートシェイプとの違いで、できる/できない があるのでしょうか。
ちよっとパニックです。
>>110
ありがとうございます。できないですよね。
どうしてなんでしょう。もし何かヒントがあればおしえてください。宜しくお願いします。
112:デフォルトの名無しさん
10/04/23 17:55:17
>>111
じゃあたぶんボタンの名前を間違ってるだけだな
あとシェープじゃなくてシェイプな。大した違いではないけど何か調べるときに
検索やヘルプでひっかかりにくくなるから正しく覚えておいた方がいい
113:デフォルトの名無しさん
10/04/23 18:06:43
>>111
しばらく触ってなかったんでキーワードがみつからないが
色変更させてからシートなりオブジェクトなりを強制再描画させるとかの技はあるはずだ
でなきゃ点滅処理さえ効かない
114:デフォルトの名無しさん
10/04/23 18:16:36
>>111
hogeを呼ぶ前に DoEventsでうまくいった
115:デフォルトの名無しさん
10/04/23 19:19:25
>>105
マクロはときどき壊れるからなぁ
マクロはときどき壊れるからなぁ
マクロはときどき壊れるからなぁ
116:デフォルトの名無しさん
10/04/23 20:19:54
>>103
>>104
>>105
>>112 死んでよし
117:デフォルトの名無しさん
10/04/23 20:49:19
Mid関数と、Mid$関数の違いって、戻り値をバリアント型で返すか、文字列型で返すかだよね?
バリアント型で返さないとエラーになる場合ってのはどういうとき?
118:デフォルトの名無しさん
10/04/23 21:15:36
>>115
あの餌で釣れるとは思わなかったんだが・・・
119:デフォルトの名無しさん
10/04/23 21:18:03
>>116
マクロはときどき壊れるからなぁ
マクロはときどき壊れるからなぁ
マクロはときどき壊れるからなぁ
120:デフォルトの名無しさん
10/04/23 22:15:47
>>117
違う
どっちも戻り値はString型
121:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/04/24 12:38:09
>>122
c = WorksheetFunction.Ceiling(n / 2 + 0.1)
かな?
125:デフォルトの名無しさん
10/04/24 12:54:05
>>123
×Mattew ○Matthew
みんな買おうZE☆
URLリンク(www.amazon.co.jp)
126:デフォルトの名無しさん
10/04/24 13:26:04
>>124
ありがとうございました。できました。
c = WorksheetFunction.Ceiling((n / 2 + 0.1),1) と、,1を追加しました。
大変助かりました。ありがとうございます。
Excelの命令が使えるこはビックリでしたが、
それよりも、VBAで切り上げ計算の演算子がないのがショックでした。
ありがとうございました。
127:デフォルトの名無しさん
10/04/24 13:40:26
>>126
これでもいいんじゃね
C = Int(n / 2) + 1
If C = 1 Then C = 0
128:デフォルトの名無しさん
10/04/24 14:33:34
>>127
ありがとうございます。
そうですね。1の特殊性がなければ、上の行1行でいいですね。
ありがとうございます。
助かりました。
129:デフォルトの名無しさん
10/04/25 02:38:39
教えてください。
Excel VBAのプログラムを書いて、仕事の改善に使っています。
しかし、VBAのテキストエディタが使いにくいので、なんとかできないかと思っています。
VBAエディタで不満なのは、
・自分の好きなレイアウトでソースが書けない
半角スペース、TABが無視されてしまい、ソースが見にくい
・TABが半角スペースになってしまう。
そこで、別途VB.netなどを買えば、VBA内蔵のエディタはoffになり、
VBのエディタ(TABも半角スペースによる位置揃えも可能)が使えるものでしょうか?
ブレークポイントやステップ実行なども使いたいです。
130:デフォルトの名無しさん
10/04/25 02:50:13
無理
131:デフォルトの名無しさん
10/04/25 02:54:30
>>129
そんなあなたにはExcelに埋め込むのは止めて
RubyとかPythonでWIN32COM経由で
Excel操作をすることを強くお奨めします
132:デフォルトの名無しさん
10/04/25 04:19:39
>>129
マクロはときどき壊れるからなぁ
133:デフォルトの名無しさん
10/04/25 11:01:07
>>129
あなたがVBAのエディタに合わせたほうが早いです。以上。
最初はみんな用意されたものに抵抗するんだよね。
134:デフォルトの名無しさん
10/04/25 11:23:33
DLLで関数を公開することって出来ますか?
DLLの読み込みはできるようなので
・スクリプトのDLLをロード
・セル操作などをスクリプトに公開
・VBAからスクリプトをコール
・スクリプト内で計算
・スクリプト内で公開されたセル操作などを使いExcelに出力
・VBAに戻る
といったことをやりたいのですが可能でしょうか?
135:デフォルトの名無しさん
10/04/25 11:28:11
ScriptControlで直接Excelからスクリプト呼び出しするのが普通。
136:デフォルトの名無しさん
10/04/25 19:20:36
もとからスクリプトサポートされてるんですねthxでした
137:デフォルトの名無しさん
10/04/25 20:52:08
微妙にVBAとは違うかもしれないのですがこちらで質問させていただきます
ボタンを押して現在から2時間後を出してくれるように
Cells(7, 3) = DateAdd("h", 8, Time)
と作りセルの書式設定のユーザー定義で時間と分だけを表示するようh:mmに設定しました。
同じ日内で収まる場合なら正常に8時間後を出してくれるのですが、
日を跨いでしまうとなぜかユーザー定義が勝手にyyyy/m/d h:mmに変わってしまいます
宜しければ対処法をご教授くださいませ
138:デフォルトの名無しさん
10/04/25 21:13:42
>>137
Cells(7, 3).Value = Format(DateAdd("h", 8, Time), "h:mm")
139:デフォルトの名無しさん
10/04/25 21:17:27
>>138
無事表示してくれました
本当にありがとうございました
140:デフォルトの名無しさん
10/04/25 23:06:48
面接でVBAをアピールしたら「そんなもの下の下でしょ?(笑)という反応でした。
そんなに駄目っすか?だったらVBできますって言った方がまだ良い?
141:デフォルトの名無しさん
10/04/25 23:11:28
VBAの良さって普通の人であればあるほど知らない。
ただ、他のことも出来てVBAもできる、ぐらいじゃないと意味がない。
142:デフォルトの名無しさん
10/04/26 00:15:50
業種と職種による。
プログラマーならVBAは基礎知識のうちだからアピールポイントにはならない。
143:デフォルトの名無しさん
10/04/26 00:29:18
基礎知識なのか
excelとかそもそも使わないし
C++一筋だったからVBA最近まで知らなかったよ
144:デフォルトの名無しさん
10/04/26 11:47:01
事務員で「Excelできる人歓迎」みたいに書いてあったらVBA知ってるとかなり有利。
プログラマーならVBでもアウトだろうねえ。まあ会社にもよるだろうけど。
145:デフォルトの名無しさん
10/04/26 11:52:03
まあそうだけど事務員とプログラマーじゃ一応給料が結構違うし
事務員は月給12万くらいだけどプログラマーなら25万くらいあるし
146:デフォルトの名無しさん
10/04/26 12:27:51
客先常駐のPGだと経歴書にEXCELとかVBAを一切書いてなくても
本業の待ち時間にVBAのちょっとしたものを作らされたりするよね。
147:デフォルトの名無しさん
10/04/26 12:50:51
プログラマーじゃないけど出身が社内SEなんで、社内SEなら業務ツール作りで
VBA使えることって便利だし重要かなと思ってアピールしたんだけどなあ・・・。
他には一応Java、Cはやってるし、鯖で必須のPerl、Python、VBSあたりも普通に
使えるんだけど、小さな会社の社内SEなんで、鯖管理で使う後者はともかく、
前者はアピールしない方が良いかと思ったんだよな。
そもそもプログラマー志望じゃないし、自社開発も無いって話だったんで、
なんか無言でシコシコ書いてるのが好きなんだろ?って思われなくなかった
っていうか。
148:デフォルトの名無しさん
10/04/26 17:18:19
それを面接で言えばよかったんじゃないの?なんで言わなかったの?
149:デフォルトの名無しさん
10/04/26 17:24:47
>>148
いやあ、面接官がIT系のコンサル野郎だったでやんす。
「システム導入こそすべて」みたいな奴で、もうどうにもならんかった。
開発も泥臭いとこはやってなさそうな感じの。
まあ、そんな奴がのさばってるって時点でアレなんですが。
150:デフォルトの名無しさん
10/04/26 17:55:07
マ板でやれや
151:デフォルトの名無しさん
10/04/26 18:18:12
Excel2007です
現在MicrosoftWebBrowserを利用して
指定セル(住所が書いてある)の地点のGoogleMapが表示されるようにしてあります。
ここでもう少し高度な操作をしたいために(ピン操作やルート案内など)
GoogleMapsAPIを使用したいのですが
ExcelVBAでGooglemapsAPI(javascript?)をGoogleMapに投げ込んで
結果をMicrosoftWebBrowserに返すにはどうすればいいのでしょうか?
152:デフォルトの名無しさん
10/04/26 18:21:43
>>149
気持ちは分かる
153:デフォルトの名無しさん
10/04/27 11:34:07
filecopyで、ネットワーク上の共有フォルダにファイルをコピーさせたいのですが、
共有フォルダにアクセスできない場合のエラー処理が出来ずに困っております。
dirでいけると思ったのですが、アクセスできない場合、dirでもエラーになってしまいます。
何かよい方法はないでしょうか。
154:デフォルトの名無しさん
10/04/27 12:28:48
On Error
155:デフォルトの名無しさん
10/04/27 13:23:14
On Error でも良いんですが接続先のサーバーやPCが落ちてるときなど
タイムアウトで実際にエラー処理に移るまでに時間が掛かりすぎて困ります
このエラーが出るまでのタイムアウトを短くするにはどうすればよいでしょう?
156:デフォルトの名無しさん
10/04/27 14:18:45
>>155
ファイル処理とかネットワーク処理は、ちゃんとやろうとすると意外と大変。
とくにVBAの関数だけではタイムアウトが制御できないから、
グローバル変数を使ったフラグとタイマーを使って時間内に終わったかどう自分で調べるような仕組みを
ちまちま作るしかない。
フラグセット→タイマーセット→On Errorで強制終了回避→ファイル処理→すぐに終わったらタイマー解除
タイマーで強制的に抜けたらフラグクリア
フラグがセットされたままだったら処理成功と判断する
みたいな手順を、よく考えて作る。
157:デフォルトの名無しさん
10/04/28 07:47:23
,―ヽ_(((((_、―
,/ ノ ヽ ~\
/ ノ IPA ヽ ~\
/ ノ ヽ、 `ヽ
| ノ / ̄\ / ̄~ヽ ヽ i
| ノ | ノ
\ | <●> <●> ( )
\ | | | i /
| / ヽ レ
i (●_●) /
i、 ,-―-、 ・ /
i、 <(EEEEE)> ∵/ どういたしまして
i、 \ ./ /
\ ーー ,ノ
,,.....イ.ヽヽ、ー-―一ノ゙-、.
: | '; \_____ ノ.| ヽ i
| \/゙(__)\,| i |
158:デフォルトの名無しさん
10/04/28 16:43:11
ほんと糞言語だよな
スタックないなんて
切り上げ切捨てのどっちかもないよね?
159:デフォルトの名無しさん
10/04/28 17:05:55
スタックっつうか配列以外のデータ構造がまともに扱えない
切り上げ切捨てはどっちも出来る
160:デフォルトの名無しさん
10/04/28 19:08:50
↑
実装できないwww
161:デフォルトの名無しさん
10/04/28 21:23:58
糞言語だと思うなら、使わなければいいじゃん
162:デフォルトの名無しさん
10/04/28 22:24:00
↑
vbaは言語じゃねーよwww
163:デフォルトの名無しさん
10/04/28 22:44:06
連休らしくなってまいりました
構ってちゃんの季節ですね
164:デフォルトの名無しさん
10/04/28 22:46:53
ふぅ(´ω`)
165:デフォルトの名無しさん
10/04/28 22:47:53
>>163
URLリンク(jukai-deep-ice.com)
166:デフォルトの名無しさん
10/04/29 00:43:54
VBに足りない機能は
全部COMという万能倉庫から持ってくればいい。
167:デフォルトの名無しさん
10/04/29 09:57:52
COM使うならExcel使う必要も無ければVBAを使う必要もない
168:デフォルトの名無しさん
10/04/29 10:40:35
意味がわからない。
そもそもVBAのグローバルコンテキスト自体がOfficeのCOM(IDispatch)だよな。
で、VB(A)以外でCOMを使うということだけど、
他言語で書いたらどれだけコーディングが面倒かご存知?
まあ、WinOLE32とかいちいっちコーディングするのが面倒じゃなくて
ブラウザも要らないなら、どうぞって感じなんだけど。
あと、Excelと密に連携取れないね。
169:デフォルトの名無しさん
10/04/29 10:47:31
え?
170:デフォルトの名無しさん
10/04/29 12:19:42
ExcelというアプリのUIを丸ごと再現するのは面倒だし意味ないし
VBAだけではなかなかかゆいところに手が届かないし
事務員がExcelさわってる裏で事務作業の手伝いをさせるのがVBAの本来の使い方だから
171:デフォルトの名無しさん
10/04/29 12:41:39
まあ、ここでExcelVBAを否定しても意味ないし
172:デフォルトの名無しさん
10/04/29 13:47:12
たしかにRubyは面倒だな
173:デフォルトの名無しさん
10/04/29 14:30:42
みなさん、普段はどんな言語を使ってるんですか?
・・・と聞こうと思ったけれど、ここは事務員のが多いって話でしたね。
ということは、VBScriptとかhtmlとかJavascriptとかのエンドユーザ向け言語ですか?
174:デフォルトの名無しさん
10/04/29 14:37:53
またもや知ったかか
175:デフォルトの名無しさん
10/04/29 14:42:01
ここで一番多いのは警備会社勤務
2ちゃんの質問スレで困ってる人を見つけたら助けるふりして雑談始めるのが仕事
176:デフォルトの名無しさん
10/04/29 14:46:30
事務員だけどVBAできます・・・・というか、IT屋のPGとして開発経験があれば、
プロジェクト規模とかステップ数でPGとしての職歴をアピールできるのかもしれないけど、
そうでない場合はアピールしようが無いというか、何をもってできるとするのかよくわからん。
177:デフォルトの名無しさん
10/04/29 14:47:28
>>175
自宅警備会社というやつですか?
178:デフォルトの名無しさん
10/04/29 15:01:55
>>177
自室です。
179:デフォルトの名無しさん
10/04/29 16:14:27
>>173
ネットが繋がらない環境でJava使ってる。
VBAは各種ファイルの生成とか、XMLやらブックの解析とか。
180:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/04/29 17:20:05
URLリンク(officetanaka.net)
182:デフォルトの名無しさん
10/04/29 18:08:21
Application.Calculation = xlCalculationManual
で、関数の計算を止めた場合、
WorksheetFunction.Maxなどで関数をVBA内で使用(シートへの記載は無し)したら、
その計算結果を利用する判定時に誤作動したりするのですか?
やはり直前でxlCalculationAutomaticに戻さなくてはいけないのですか?
183:デフォルトの名無しさん
10/04/29 18:24:43
お話に花が咲いているところ
嫌味言うなら質問するな
184:デフォルトの名無しさん
10/04/29 20:40:06
気の利いたこと言おうとして失敗する人っているよね。
その一言が余計、という。
「へえ。君って○○大学出てるんだ」
「いやあどうしょうもないバカ大学でお恥ずかしい(謙遜のつもり)」
「……俺の息子はその大学を第一志望にして入学したんだよ(怒)」
185:デフォルトの名無しさん
10/04/29 21:11:20
つ Ca
186:180
10/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:デフォルトの名無しさん
10/04/30 00:43:47
>>184
その会話で気の利いたことを言った(つもり)のはどっち?
188:デフォルトの名無しさん
10/04/30 00:45:56
>>186
a = Worksheets("AAA").Range(hoge).Cells(1, 1).Address
189:デフォルトの名無しさん
10/04/30 11:02:24
>>186
Visibleってのは「見えている」範囲のこと。ウィンドウを「切り替えたら見えるだろう」範囲ではない。
だから裏画面では意味がない。
190:180
10/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:デフォルトの名無しさん
10/04/30 19:13:14
>>190
アドレスとかじゃ本末転倒か
192:デフォルトの名無しさん
10/04/30 19:23:11
そうですね。できれば、aaa = Conv(1,1)みたいな感じの物がVBAに備わっていることを期待しているのですが、
やはりむずかしそうでしょうか。
あと、もう1つよろしいでしょうか。
セルを選択するのと反対に、解除するのにはどのように書けばよろしいでしょうか。
選択は、セルの周囲の線が太く見えて、解除は、セルの周囲の線が太くなくなるということです。
選択 cells(1,1).select
解除 cells(1,1).Deselect と書いたら、叱られてしまいました。
193:デフォルトの名無しさん
10/04/30 19:43:52
>>190
rng_str = Cells(Row, Col).Address(False, False)
とりあえずこうするといいよ。
194:デフォルトの名無しさん
10/04/30 21:17:14
>>187
>その会話で気の利いたことを言った(つもり)のはどっち?
二つ目の鍵カッコだよ。
この会話では、相手が不機嫌になった理由を教えてくれたから、
「ああ、俺余計なこと言ったな」と本人も気づくけど、
普通は腹の中で「この野郎」と思ってもわざわざそれを伝える人は少ない。
結果、本人はずっと「俺ってユニーク」などと思い込んだまま、
他人をイラつかせ続けることになる。
まあ、俺のことなんだが。
195:デフォルトの名無しさん
10/04/30 21:59:14
>>192
行列の変換は Chr(64 + y) & x
ただしZ列より右は表現できない
AA列以降もサポートしたいなら自分で関数を作ってモジュール化すればいい
セル選択の解除は不可能
196:デフォルトの名無しさん
10/04/30 22:01:57
>>192
一般機能で出来ないことはvbaでも出来ない。
シートの中で必ず1セルは選択されているものだから、vbaでもどこかのセルは選択しないとあかん
197:デフォルトの名無しさん
10/04/30 22:05:08
何でもいいけどいい加減>>182に答えてくれよ!
さもないと自分で調べるぞ!!
198:デフォルトの名無しさん
10/04/30 23:29:49
>>193
ありがとう。Row=1, Col=1 → A1 と出ました。ありがとう。
これで楽になりそうです。
>>195, >>196
>セル選択の解除は不可能
>シートの中で必ず1セルは選択されているものだから、vbaでもどこかのセルは選択しないとあかん
そうなのですね。ありがとうございました。
確かに、自分でExcel使うときは、どこす1箇所選択されています。
助かりました。ありがとうございました。
199:デフォルトの名無しさん
10/05/01 15:32:28
>>197
調べろよw
あと手動計算にしなくても再計算すればよろし
マクロの記録でF9だ
200:デフォルトの名無しさん
10/05/01 17:57:32
ていうか再計算止めたからってWorksheetFunction
の計算まで止まるわけないだろ。
むしろ発想自体新鮮w
201:デフォルトの名無しさん
10/05/01 19:46:16
/ ̄(S)~\ < >
/ / ∧ ∧\ \< 嫌なら見るな! 嫌なら見るな! >
\ \( ゚Д,゚ ) / /< >
\⌒ ⌒ / ノ Y´`Y´`Y´`Y´`Y´`Y´`Y´`Y´`Y´`Yヽ
)_人_ ノ
/ /
∧_∧ ■□ ( ))
( ; )■□  ̄ ̄ヽ
γ⌒ ⌒ヽ  ̄ ̄ノ ノ
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄|
202:デフォルトの名無しさん
10/05/01 22:37:18
>>199-200
自分で調べるのが面倒だからこその質問スレだろうが!
情弱なめんな、ゆとりなめんな質問に答えてくれて本当にありがとうございました。
203:デフォルトの名無しさん
10/05/01 22:41:08
↑
冷静な自己分析だと思うぞ
204:デフォルトの名無しさん
10/05/02 06:25:26
>>202
>自分で調べるのが面倒だからこその質問スレだろうが!
自分で調べてもどうしてもわからない時の質問スレだよ。
別に2chじゃなくとも、人に教えを請う時はそれが当たり前だと思うが。
205:デフォルトの名無しさん
10/05/02 06:59:03
↑
2ちゃんの画一的なコメント 乙
206:デフォルトの名無しさん
10/05/02 12:09:35
てか教えてGooに行けばいいんだよな
207:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/05/02 15:58:59
> 意思決定までコンピューターが出来るようになると、
> 人間自体が必要なくなる。
今でもほとんど「意思決定」に人間なんか要らないだろ。
1. 提案者「こんなアイディアがあります」
2. 決定者「費用対効果を数字で示せ」
2. 提案者「費用が○○円、利益が△△円を見込んでいます」
3. ○○ < △△か?
true → 4.へ
false → 5.へ
4. 決定者「そのアイディアを採用する」
→ 6.へ
5. 決定者「そのアイディアを却下する」
→ 6.へ
6. 決定者「次のアイディアはなんだ?」
結局のところ、「意思決定」(笑)とやらをやる人間はこんなロジックで動いているんだから、
人間なんかおく必要ない。Excelどころか、20年前のPCでBASICで組んでもいいレベル。
「費用対効果を出せ」「数字で示せ」「説明責任を果たせ」、って言うと非常に説得力が
あるように見えるけど、実は判断基準のなすりつけなんだよね。
209:デフォルトの名無しさん
10/05/02 17:06:47
>>208
んじゃそのプロセスをマクロで表現しなよ
210:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/05/02 21:54:14
あなたは知らないのですか?
212:デフォルトの名無しさん
10/05/03 13:25:00
>>210
グラフの種類を散布図にして
元データの設定ウィンドウでY軸からA列を消して、X軸にA列を追加
213:デフォルトの名無しさん
10/05/04 21:21:37
エクセルのサイズが500MBに届きそうなんだがこんなもんか?
214:デフォルトの名無しさん
10/05/04 22:22:06
こんなもんかと聞かれても困るな w
まぁ常識的に考えて肥大しすぎだとは思うが w
215:デフォルトの名無しさん
10/05/04 22:53:39
URLリンク(peiyorin.cocolog-nifty.com)
これ以外にもシートをコピー→新しいブックの新しいシートに貼付け も効果があるらしい
(シートタブからのシートのコピー はダメ)
216:デフォルトの名無しさん
10/05/04 23:40:10
>>215
それやると、セルの幅はコピーされない(初期状態のまま?って言うの)んと違うかったっけ?
217:デフォルトの名無しさん
10/05/04 23:50:05
>>216
? 普通に書式も一緒にコピーできるけど?
218:デフォルトの名無しさん
10/05/05 00:33:09
ページ設定がコピーされないんでそのまま印刷するとおかしくなるだけ
219:デフォルトの名無しさん
10/05/05 12:47:49
>>210
Excelは、変なお節介があり、ユーザーは動作の予想ができないので、
覚えにくいし、使いにくいですよね。
さて、具体的な方法は自分で考えてもらうとして、イメージを説明します。
グラフを作るとき、多くの場合は、希望するデータ範囲を囲って、
グラフボタンで進んで行って「グラフできたぁ」となるワケですが、
これは、EXcelのお節介な自動機能でグラフを作っているだけなので、
覚え始めのころは「このやり方が全てだ」と思い込んでしまいます。
僕もそうでした。しかし、この方法では、いつかは行き詰まります。
本来あるべき論としては、「この列のデータを、あの列のデータに対してグラフ化したい」だと思います。
このやり方が、本当のグラフ作成なのですが、
Excelのお節介で、私たちは、それが想像しにくいようになっています。
範囲を選択して、グラフボタンで、グラフウィザードを進んで行きますが、
そのウィザードの途中に、次のような画面が出てきます。
URLリンク(mcnc.hp.infoseek.co.jp)
この画面では、すでにEXcelが勝手に選んだ「系列1,系列2」というY軸の値が選ばれています。
まずこれを削除します。そして、その右側の「Xの値」「Yの値」の所の文字も消して、
その枠の右側の三角?っぽいボタンを押します。
すると、ウィザードを開いているのに、なぜかシートに触れてしまいますので
自分の好きなY軸の範囲を選択します。同様にして、Xの値も範囲を指定します。
これで、EXcelのお節介なく、自分の好きな軸に、自分の好きな範囲を指定してグラフが作れます。
この方法は、既に出来上がっているグラフに対しても可能でなので、
自分で調べて見てください。
僕の思うグラフの作成は、「これをXに、これをYに」という指定をするのが正しい方法、
というかユーザーがイメージできる作成方法だと思っています。
Excelやワードのお節介が減ることを期待したいです。
220:デフォルトの名無しさん
10/05/05 13:32:18
VBAの話をしろボケ
221:デフォルトの名無しさん
10/05/06 00:23:24
>>219
なかなか面白い話しやけど、確かにスレ違い。
222:デフォルトの名無しさん
10/05/08 17:44:55
配列に数が入っている状態で,
平均値などを計算したい場合,
一度,シートに書き出してエクセルのaverage関数を使うしかないのでしょうか?
223:デフォルトの名無しさん
10/05/08 17:47:19
いいえ
224:222
10/05/08 17:55:03
>>223
すいません
自分で関数を定義したくはないのですが
そのようなサブルーチンがvbaにも実装されているのでしょうか?
225:デフォルトの名無しさん
10/05/08 18:11:12
WorksheetFunction.Averageって配列を受け付けられなかったっけ?
226:デフォルトの名無しさん
10/05/08 18:49:16
配列できるね。
227:デフォルトの名無しさん
10/05/08 19:13:10
セルにAddCommentで複数行のコメントを入れようとしてます。
vbNewLineで改行していれようとすると5行までしか入りません。
無限にいれれるようにするにはどうしたらいいでしょうか?
228:222
10/05/08 19:13:18
例えば,
配列 a[100]
を定義したとして,a[10]からa[i]までの平均値をだしたいのですが
excelの関数で大丈夫ですか・
229:デフォルトの名無しさん
10/05/08 19:24:00
>>228
じゃあ、10~iまで回せばいいじゃん
230:222
10/05/08 19:49:42
>>229
可変長の部分をa_temp というdouble型の配列を作成,そこに格納し
ave = WorksheetFunction.Average(a_temp)
としても 0 しか返ってきません.
何か間違っていますでしょうか?
231:デフォルトの名無しさん
10/05/08 19:50:24
平均ぐらい自分で出せよカス
232:222
10/05/08 20:13:58
>>231
枯れたサブルーチンがあるなら自分で書くよりミスは圧倒的に減るはずですよね.
なんとかなりませんか
233:デフォルトの名無しさん
10/05/08 20:15:05
この程度でミスしてる時点で他のあらゆるコードが信用出来ない。おまえさんはもう諦めろ
234:222
10/05/08 20:19:47
>>233
vbaは何分初めてなもんで
よろしくお願いいたします
235:デフォルトの名無しさん
10/05/08 20:23:10
何事もほどほどにな
236:デフォルトの名無しさん
10/05/08 20:45:32
>>227
気のせいでした
237:デフォルトの名無しさん
10/05/09 01:21:50
>>234
とりあえず、作ったプログラムを丸ごと貼り付けて
238:222
10/05/09 09:59:16
お騒がせしました.
求めた平均値を入れる変数の型をlong型にしていたため,
常に0となっておりました.
double型に変えると無事動作しました
ありがとうございました
239:デフォルトの名無しさん
10/05/09 15:56:22
あるブックでマクロ実行中、他のブックを操作する方法ないですか?
240:デフォルトの名無しさん
10/05/09 17:08:43
>>239
もう少し詳しく書かなきゃわからんよ
他のブックを操作するとは例えばどんな事?
また、あるブックでマクロ実行中て書いてるけど
どんな処理をしている時を想定しているの
241:デフォルトの名無しさん
10/05/09 19:07:08
>>240
イメージとしてはExcelの二重起動でしょうか
マクロの実行中ってほかのエクセルの編集作業が全くできないと思うんですが、それをできるようにしたいです。
242:デフォルトの名無しさん
10/05/09 19:16:36
そのまんま、Excelを2重起動すればいい。
243:デフォルトの名無しさん
10/05/09 19:25:38
>>239
取りあえずDoEventsでも入れてみれば
244:デフォルトの名無しさん
10/05/09 19:48:48
>>242-243
質問が悪かったです。ちょっと出直してきます
245:デフォルトの名無しさん
10/05/09 20:11:42
自己解決
246:デフォルトの名無しさん
10/05/10 08:04:51
phpのmysql_connect()関数が使えません。
環境は、
windows7
Apache2.2
PHP5.1
mysql server 5.1
です。
普通のphpファイルは開けるのですが、
mysql_connect()を使うとブラウザでページを表示できなくなります。
なぜでしょうか?
247:デフォルトの名無しさん
10/05/10 08:07:15
すいません。誤爆しました
248:デフォルトの名無しさん
10/05/10 23:22:47
図がないシートなのに、保存しようとすると
「図が大きすぎます」エラーが出るのは
どんな理由が考えられますか?
VBAがたくさん使ってあるシートです。
でも、図の類は何もありません。
249:デフォルトの名無しさん
10/05/12 04:09:28
スタックが小さくて、まともな業務ソフトつくれないよ。
マイクロソフトは、あいかわらず、いつまでもユーザー泣かせのことやってる。
250:デフォルトの名無しさん
10/05/12 04:12:14
これだけメモリー搭載が増えてる時代なのになんでスタックを大きくしないのか
不思議でしようがないいよ。
故意にユーザーを苦労させ、エラー出るように設計してるとしか思えない。
251:デフォルトの名無しさん
10/05/12 04:14:37
なんか、日本語版だけ故意にスタック小さくしてるような感じする。
252:デフォルトの名無しさん
10/05/12 07:36:24
スタックが増えても、落ちるまでの時間が多少伸びるだけじゃねえのw
253:デフォルトの名無しさん
10/05/12 12:40:58
VCのスタックサイズのデフォルトは1MBなんだが、VBAではどのくらいなんだ?
254:デフォルトの名無しさん
10/05/12 13:04:22
条件式について質問です。
処理対象データ ↓
A B C D
1 あ い う
1 あ い う
2 あ い う
3 あ い う
3 あ い う
4 あ い う
4 あ い う
4 あ い う
というデータがあるとします。
A列の値が同じである間、同じSheetにデータを出力できるようにし
A列の値が異なる場合になったならば、別シートに出力変換したいんだけども
何かアドバイスを貰えませんか。
255:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/05/12 13:21:31
>>256
返答ありがとうございます。
高度な文面なので検索してちょっと理解深めます。
Offset~~に解決の糸口を見つけられそうなので
イジイジしてきます。ありがとおおおおおおおお
258:デフォルトの名無しさん
10/05/12 18:19:08
教えてください。
質問の概要
ワークシートの変更を禁止したいです。
説明
・シート内にあるボタンを押すと計算が始まります。
・その計算は、そのシート内のセル内容を読込んで計算するので、シートを変更されると、困ります。
・そこで、計算している間は、シート変更を禁止させたいです。
計算中にシートタブがクリックされたら、このような動きにしたいです。
メッセージボックスを表示して「今はダメよ」と表示する
もしメッセージボックスを表示することで、計算が狂ってしまうなどの問題があるのなら、
最低でも、シート変更を無視、無反応にし、計算を安全にしたいです。
どのようにすれば良いでしょうか?
宜しくお願いします。
259:デフォルトの名無しさん
10/05/12 18:21:51
Application.ScreenUpdateing = Falseじゃだめなの?
260:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/05/12 21:24:18
>>260
ボタンの背景色の変更と、その色で画面が更新されるタイミングには実際にはブランクがある為。
VBAマクロ実行中も一定の間隔で画面の更新処理は走るが、
ScreenUpdatingがFalseの時はその処理が妨げられる。
ScreenUpdatingをTrueに戻すと、とりあえず画面全体を更新しなおすので、
後述の処理だとまとめて変化したように見える。
262:デフォルトの名無しさん
10/05/12 23:44:46
できました
263:デフォルトの名無しさん
10/05/13 01:00:39
Button1.BackColor = QBColor(赤)
Call DoEvent
Application.ScreenUpdating = False
Call KEISAN
Application.ScreenUpdating = true
Button1.BackColor = QBColor(白)
だったかな
264:デフォルトの名無しさん
10/05/13 01:03:13
全然違った
スマソ orz
Button1.BackColor = QBColor(赤)
DoEvents
Application.ScreenUpdating = False
Call KEISAN
Application.ScreenUpdating = true
Button1.BackColor = QBColor(白)
265:デフォルトの名無しさん
10/05/13 01:07:09
自作関数をセル上に入力すると、ポップアップで引数の説明文を表示させるようにするにはどうしたらいいのでしょうか。
例えばセル上に "=IF(" まで入力すると
IF(論理式,[真の場合],[偽の場合]) と、表示されますが、
このポップアップ表示されるやつを自作関数でも表示させたいのです。
ご教示よろしくお願いします
266:デフォルトの名無しさん
10/05/13 02:50:22
自己解決
267:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/05/13 17:31:47
つメモ帳
269:デフォルトの名無しさん
10/05/13 17:38:07
>>267
一般的には、TABで送ったものはSHIFT+TABで戻すんじゃね?
270:デフォルトの名無しさん
10/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
10/05/13 18:11:23
>>266は私のレスではありません。
引き続きお願いします。
272:265
10/05/13 19:04:04
>>271は私のレスではありません。
引き続きお願いします。
273:デフォルトの名無しさん
10/05/13 20:59:53
>>270
Visual StudioやEclipseといった開発環境は大抵Shift+Tabで戻るよ
秀丸の場合、1文字以上選択状態にしてShift+Tabで戻る(サクラエディタも同様)
Tabキーでスペース2個とか4個とかが入力されるようにするのは
スペース派(ソースコード中にタブ文字を一切使わない)には普通のこと。
タブ文字は見る方の環境によって幅が変わってしまうので、それを嫌っている。
ただVBAは専用エディタでしか見ないだろうし、
そもそも設定変更できないのがひどいのは事実
274:デフォルトの名無しさん
10/05/13 21:05:50
あのエディタでリドゥのつもりでCtrl+Yを押すと悲惨な目に遭う
275:デフォルトの名無しさん
10/05/13 21:58:59
いやならバインディングかえればいいのに
馬鹿なの?死ねの?
276:デフォルトの名無しさん
10/05/13 22:06:50
死ねの?
277:デフォルトの名無しさん
10/05/13 22:46:05
死ぬの?─┬―死ぬよ(死ぬ派)
. │
. └―死なないよ(死なない派)
278:デフォルトの名無しさん
10/05/14 07:41:41
時刻の条件式について質問です。
00:15
00:30
00:45
~~略~~
03:00
みたいな時間がず~~~~と続くと想定して
これを開始の00:15から03:00までの間ループさせたいんだけど
時間と分を別々に分けて15分ずつ足して行く方法しかないですかね?
279:デフォルトの名無しさん
10/05/14 08:22:28
>>278
そうじゃないの
つまり0時1時2時3時のステップと15分30分45分00分のステップを入れ子でループするんでしょ
280:デフォルトの名無しさん
10/05/14 08:25:59
>>278ですけども
分けて計算すると変数多くなってしまうと思っての質問だったのですが
分けて計算するとしたら、どういう感じのループ条件式になりますでしょうか。
重ね重ねすいません。
281:デフォルトの名無しさん
10/05/14 08:27:43
>>279
おおお!!納得です。
ちょっと考えてきます、ありがとございました!
282:デフォルトの名無しさん
10/05/14 12:11:45
エンバグの元なのに
283:デフォルトの名無しさん
10/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:デフォルトの名無しさん
10/05/14 12:42:08
>>283
配列の全要素は0ではないです、すいません。
A(1) = 1
A(2) = 2
A(3) = 3
A(4) = 4
A(5) = 3
285:デフォルトの名無しさん
10/05/14 13:00:10
>>283
配列をソートして前と違うものを取り出せばよい。
あるいは最小値と最大値が極端に離れてなければBoolean型の配列を
Redim FLG(最小値 To 最大値) As Boolean
のように用意して、ループを回しながらフラッグをたて、フラッグが
立っているものを取り出してもよい。
数値にDictionaryを使うやつはアホ。
286:デフォルトの名無しさん
10/05/14 13:05:51
すまん、上はフラッグが立ってないときだけ取り出すの間違いね。
287:デフォルトの名無しさん
10/05/14 13:11:59
Dictionaryを使えばいい
288:デフォルトの名無しさん
10/05/14 13:13:21
>>285
配列のソートって出来るのですね。
フラッグはちょっと難しそうでしたので配列ソートの方を参考にさせて頂きます。
調べてる時Dictionaryというのも頻繁に出てきたのでこれも調べてみます。
レスありがとございました!
289:デフォルトの名無しさん
10/05/14 13:18:27
馬鹿の一つ覚えのDictionaryがやっぱり出てきたかw
290:デフォルトの名無しさん
10/05/14 13:25:01
Dictionaryの何がいけないか2行で説明してくれ
291:デフォルトの名無しさん
10/05/14 13:25:29
え?Dictionaryダメなの?
292:デフォルトの名無しさん
10/05/14 13:31:43
Dictionaryダメっていうやつはカルト宗教にはまりやすいタイプ
293:デフォルトの名無しさん
10/05/14 13:32:51
ダメって書くなら根拠書いて欲しい。
言いっぱなしは迷惑。
294:デフォルトの名無しさん
10/05/14 13:35:29
うるせーDictionaryっていっぱい連レスするんじゃねーよ
295:デフォルトの名無しさん
10/05/14 13:37:59
>>290
二行も必要ないなw
アホだからだよ。
無理やり二行で書くと
何で単純な整数にハッシュが必要なんだってことだな。
ハッシュなんて文字列に使うものだぞ。
296:デフォルトの名無しさん
10/05/14 13:48:13
そもそもDictionaryがどういう実装しているか知らないが、
(少なくともCollectionよりは効率がいいはずだが)
整数値は整数値をそのままハッシュ値にすればいいでしょ。
ていうか、そんなんでDictionary否定してたの?
297:デフォルトの名無しさん
10/05/14 13:56:03
ダミだこりゃ。
お手上げだね。
298:デフォルトの名無しさん
10/05/14 14:05:17
なるばくDictionaryを多く使ったほうがいいよ
299:デフォルトの名無しさん
10/05/14 14:08:51
何にでもDictionaryの人って大和の吊るし柿みたいに味のあるコードを書く人多いよね。
300:デフォルトの名無しさん
10/05/14 14:19:11
正直Dictionary回避してまで手に入れたいものって何?
301:デフォルトの名無しさん
10/05/14 14:26:17
インタプリタでソートしたりなんかしたりして遅くなるより
ネイティブなDictionaryでやったほうがいいね
302:デフォルトの名無しさん
10/05/14 14:35:57
ほんとアホばっかだなw
>>299
そういう皮肉は今の人には通じないって。
303:デフォルトの名無しさん
10/05/14 14:48:09
場合によって使い分けるのが一番
304:デフォルトの名無しさん
10/05/14 14:58:02
VBA関係ないし
305:デフォルトの名無しさん
10/05/14 16:11:00
Rangeオブジェクトについてなんですけども、
複数モジュールがある中で共有して扱わないとエラー出てしまったので
subとかが書かれてるよりも一番上(グローバル宣言?)にしたらエラーが出ませんでした。
これって外道ですかね?
306:デフォルトの名無しさん
10/05/14 16:16:12
何の話ざんしょ。もっとわかりやすくしてね。
307:デフォルトの名無しさん
10/05/14 16:35:00
Rangeオブジェクトの変数についてですけども、Moduleが1~3あったとします。
Module1
Module2
dim aaRange as Range
call ユーザ定義関数(aaRange)
Module3
ユーザ定義関数(aaRange)記載
上記のようにModule2でRangeオブジェクトを宣言し、ユーザ定義の引数で貰ってるとします。
頻繁にユーザ定義関数を実行するのですが、aaRangeの値を常に保持していたくてグローバル宣言(呼び方あってるのかな)
してしまったと言う訳ですが!!!
糞設計でしょうか!!
308:デフォルトの名無しさん
10/05/14 16:37:23
うんkです
309:デフォルトの名無しさん
10/05/14 16:45:36
デナオシテキマス
310:デフォルトの名無しさん
10/05/15 14:27:47
16進数苦手。
イミディエイトウィンドウで
?hex(50000)
だと
C350
と出ます。
でも
?&hC350
だと
-15536
と出ます。
何で??
50000に戻したいのに・・・。
因みに
?-15536=50000
False
?hex(-15536)=hex(50000)
True
と出ます・・・。
311:デフォルトの名無しさん
10/05/15 15:50:46
>>310
50000はIntegerの範囲に収まってないのにIntegerに変換しようとしてそうなる
?&hc350& でLongに変換すればちゃんと50000になる
最後の&はLongを表す文字な
312:デフォルトの名無しさん
10/05/17 08:04:24
エクセルVBA開発のコーディングルール作ってるんだけど、意見聞かせて欲しい
ちなみに、会社で後任に引き継ぐのを想定してるだけなんで、ガチガチにする必要なし
みなさん設計する時どんなことに気をつけてます?
313:デフォルトの名無しさん
10/05/17 09:18:42
元々緩やかな下降線にはあったけど、人が減った事によって
それまでは人混みに隠れていた工作員の存在が目立つようになったのが致命傷だったな
工作員の誘導を嫌って参加者が減り、他所からの工作員を排除しようとして規制をするから
参加機会が奪われて更に参加者が減るという負のスパイラルにおちいってる
314:デフォルトの名無しさん
10/05/17 09:32:43
>>312
関数の引数は基本的にByValにするとかかな。
速度的にはByRefが望ましいんだけど。(特に文字列)
Option Explicit強制とか、
空文字の代わりにvbNull使うとか、
$バージョン関数があるなら$バージョン関数使うとか、
改行文字の種類も揃えたほうがいいかも。
変数名のつけ方をシステムハンガリアンにするなら
統一したほうがいいね。
315:デフォルトの名無しさん
10/05/17 12:41:57
Option Explicit以外、何一つ共感できない
316:デフォルトの名無しさん
10/05/17 12:45:34
>>315
俺もそう思った
317:デフォルトの名無しさん
10/05/17 12:47:19
なるほど
空白よりvbNullで統一したほうがいいな
そういやOption Explibt忘れてたわ……入れとこう
命名規則はアプリケーションハンガリアンにする予定
触る人のレベルなんかわからないし、プロジェクトごとの理解をまず深めて貰わないといけない
頭文字のみ大文字、単語ごとにアンダースコア、2バイト禁止
変数・プロジェクト名が長くなるから、頭文字大文字が必須になる
自分で慣れてないから書き換える手間が半端ないっていう
318:デフォルトの名無しさん
10/05/17 13:32:40
・VBA禁止
319:314
10/05/17 13:35:57
>>315-316
共感するしないじゃなくて、具体的な案とか意見書いてくれ。
問題点があるならそれもよろしく。
320:デフォルトの名無しさん
10/05/17 13:36:32
なぜそこまでしないといけないんだ
321:デフォルトの名無しさん
10/05/17 13:37:57
共感できないというなら理由ぐらい示せってだけだよ。
322:デフォルトの名無しさん
10/05/17 13:43:49
めんどくさい
323:デフォルトの名無しさん
10/05/17 13:46:18
役に立たないなあ…
324:デフォルトの名無しさん
10/05/17 13:51:31
別に役に立ちたくないし
325:デフォルトの名無しさん
10/05/17 14:00:39
>>315
俺もそう思った
326:デフォルトの名無しさん
10/05/17 15:47:24
>>315
私もそう思うわ
327:デフォルトの名無しさん
10/05/17 18:47:47
共感とか意見とか議論とか以前にルールに作るのになんかない? って質問に答えてるのが>>314だけじゃねえか
人のレスにいちゃもんつけるくらいしか出来ねえのか三流プログラマども
俺も>>315には共感するけどそれはそれとして
328:デフォルトの名無しさん
10/05/17 20:03:33
関数の前には必ず説明のコメントを書く。書式も統一して、検索しやすいようにする
何より
手段と目的が逆転しないように気をつける
329:デフォルトの名無しさん
10/05/17 20:18:20
変数名は大文字で始める?小文字で始める?
システムハンガリアンとかいうのは小文字だよね?
330:デフォルトの名無しさん
10/05/17 21:42:31
Dim hoge$ と書くか Dim hoge As Stringと書くか
331:デフォルトの名無しさん
10/05/17 22:47:17
普通は小文字で
332:デフォルトの名無しさん
10/05/17 23:08:56
大文字にしておくと、小文字で打ったときに自動訂正してくれる
だから大文字含めた変数名にしておくと、タイプミスが少なくなる
333:デフォルトの名無しさん
10/05/17 23:43:45
小文字の変数名にすると、ある型の名前を変数名にしてしまったときに
型が勝手に小文字になって困ってしまう
例えば、rangeとかdateとかを変数名にすると、全体的に型のRangeが
勝手にrangeに変わってしまう
なんとかならないんだろうか
334:デフォルトの名無しさん
10/05/18 00:04:23
VBAはシンボルを大文字小文字で区別しないんだから気にしなけりゃいいんじゃね
あとはかぶらない名前にするか
335:デフォルトの名無しさん
10/05/18 05:45:44
>>332
Option Explicitとか宣言の強制使え
>>333
システムで宣言済みの名前を使うな
336:デフォルトの名無しさん
10/05/18 07:56:22
予約後を変数で使おうとする気持ちがよくわからない。
337:デフォルトの名無しさん
10/05/18 08:04:48
特定の型の名前を予約語とは言わない。
338:デフォルトの名無しさん
10/05/18 08:26:09
特定の型の名前を(ry
339:デフォルトの名無しさん
10/05/18 08:41:53
Javaの場合なんだが、Eclipseとかの代表的なIDEは、変数の名前補完のデフォルトが
クラスの小文字名だよ
340:デフォルトの名無しさん
10/05/18 12:23:32
その人の行動は「プライバシー問題に関して無頓着」で一貫しているように
見えるので理解してもらうのは難しいと思う。新しい概念を習得してもらうには
少々歳を取りすぎている。掲示板にもらった手紙の全文を掲載した時点で
気が付くべきだったのかも。
「プライバシー問題に関して無頓着」な人は親しくない相手にも平気で年齢や
職業を尋ねる傾向があるようなので注意したほうがいいです。
341:デフォルトの名無しさん
10/05/18 12:24:23
>>335
デバッグするまでスペルミスのリスク抱えてろってのか?
タイプミスじゃなくて思い違いだったりすると、毎回変数名間違うことになる
一ヵ所ならまだしもデバッグ時に複数箇所とか煩わしすぎ
頻度の少ないコードとか気付かなかったり、確実にデバッグ出来るってわけでもないし……
342:デフォルトの名無しさん
10/05/18 13:47:54
日本語最強。
Dim 氏名 As String
343:デフォルトの名無しさん
10/05/18 15:21:21
2バイト表記はエラー起こす処理がMS公式であったはず
なんだか忘れたが、2バイト名関数を呼び出した時いらない参照呼び出して不具合引き起こしてたような
対応する気ない見たいだから、でっかいシステム組むのにはエラーでる覚悟はしとくべき
344:315
10/05/18 16:38:12
・関数の引数をByValにするのかByRefにするのかは、関数の仕様による。どちらかに決めうち
するような性質のものではない。
・空文字列とvbNullは同じものではない。VarType()してみればわかる。
・いちいち$バージョンの関数があるかどうか調べるのはめんどくさいので使わない。
そもそもmid()とmid$()とかは別物なのか?とかいうのも調べるのがめんどい。
・改行文字の種類も揃えたほうがいいかも <= 意味不明。vbCrLfを使いましょうってことだとしても、
別にそろえる必要性を感じない。
・システムハンガリアンは使わない。
345:315
10/05/18 16:40:05
ちなみに、俺が昔作ったVBA用コーディング規約で、
「変数の定義はできるだけ遅くやる(使用する行/ブロックの直前でやる」
と決めたら、誰一人共感してくれなくて、驚くほどの反発があったことを思い出したよw
346:デフォルトの名無しさん
10/05/18 16:49:53
コーディング規約というかコーディングガイド的なものとして、こんなの提示したことあった。
・アーリーバインドをなるべく使う
・イベントプロシージャの中に処理を直接書かない
・変数は一行一個で宣言しろ
・Publicな関数はPascalCaseで
・Const使え
こんな感じだったか。
347:デフォルトの名無しさん
10/05/18 16:51:59
あ、そうそう、俺はシステムハンガリアンも使って良い派で、使うならfrmとかを決めてた気がする。
348:デフォルトの名無しさん
10/05/18 19:47:42
文字列をByValで渡した時って、先頭のポインタが値渡しされるの?
それとも、文字列全体がまるまるコピーされるの?
349:デフォルトの名無しさん
10/05/18 20:40:23
参照渡し プロシジャに値を渡す時、値そのものではなく、値が格納されている
変数のアドレスを渡す
呼び出し先のプロシジャで引数として宣言している変数の値を変更する
と、その引数に指定している呼び出し元の変数の値も変更される
値渡し プロシジャに値を渡す時、値そのものをコピーして渡す。
呼び出し先のプロシジャは、渡された値のコピーを受け取るだけなので
呼び出し先のプロシジャで引数として宣言している変数の値を変更して
も、呼び出し元の変数は一切影響を受けない。
だったかと
350:デフォルトの名無しさん
10/05/18 21:15:22
>>349
で、ポインタの値渡しなの?中身の値渡しなの?
351:デフォルトの名無しさん
10/05/18 21:18:55
>>350
コピーされる。
ちなみにVBの文字列の型はBSTR。
先頭に文字列長、末尾にヌル文字のUTF16文字列だったかな。
352:デフォルトの名無しさん
10/05/18 21:27:09
手元の本によると
プロシージャの引数の文字列がコピーされるのは以下のタイミング。
・ByRefだと文字列定数を渡した時
・ByValだと常時
もちろんポインタのコピーじゃなくて文字列をフルコピー。
VBの文字列はImmutableじゃない。
353:デフォルトの名無しさん
10/05/18 21:52:10
>>351-352
ありがとうございます。
VBAについてそこまで深く書いてある本もあるんですね
354:デフォルトの名無しさん
10/05/18 22:27:49
>>344
・引数にByRef|ByValを指定しなければByRefになる。
アホが引数を書き換えるとわかりづらいバグに発展する。
普通の関数であれば値渡しでいいはず。参照渡しを積極的に使う場面は少ない。
・ごめん。vbNullじゃなくてvbNullString。
・$・非$関数は別物。$じゃなければVariantが帰ってきている。
普通はVariantには用がないはず。作者も$の方使えって言ってる。
・それならばvbCrLfとvbNewLineどちらを使うのか。
・システムハンガリアンはどうでもいいや。
355:デフォルトの名無しさん
10/05/18 22:35:57
作者って誰だよ
VBの作者か?
356:デフォルトの名無しさん
10/05/18 22:44:19
厳密にいうとVBにIntelliSenceつけたチームの中の人だな。
357:デフォルトの名無しさん
10/05/18 23:13:14
VBEの自動構文チェックって邪魔にしか思えないんだが、あれが便利で使ってるって人いる?
なんであんなものがあるのか不思議でしょうがない
358:デフォルトの名無しさん
10/05/18 23:21:43
どっかのペインにちょこっとアクティブに表示してくれるだけなら
便利な機能だけどダイアログで出るのが最高にウザいよなw
359:デフォルトの名無しさん
10/05/19 11:30:50
>>354
普通の関数であれば参照渡しでいいはず。
値渡しが必要な場合にのみByValを使え。
360:デフォルトの名無しさん
10/05/19 11:35:47
midとmid$のパフォーマンス気にする奴が、常にByVal使えとか笑えるわ
361:デフォルトの名無しさん
10/05/19 11:59:22
まあそれもそうだね。
ただ、両バージョン混在してるなら$にしろって言うけどね。
参照渡しは本当に理解してないのが多い(特にCとかJavaとかの人)
362:デフォルトの名無しさん
10/05/19 12:00:52
俺はかっこ悪いから$とかつけない
ByValもつけない
363:デフォルトの名無しさん
10/05/19 12:04:27
変数宣言とか関数宣言だと使うよ。
いちいちAsなんて書いてられない。
364:デフォルトの名無しさん
10/05/19 12:11:17
兎に角、統一してあればそれでいいや
365:デフォルトの名無しさん
10/05/19 12:23:27
Typename(Mid("a",1,1))ってやるとStringって言われるんだけど、
実際はVariantだってのはどこ見ればわかるのか知りたい。
366:デフォルトの名無しさん
10/05/19 12:25:02
第一引数を数値にしてみたけどやっぱり戻り値はStringだなあ
?Typename(Mid(123,1))
String
367:デフォルトの名無しさん
10/05/19 12:34:42
そもそもTypeNameってVariant自体は表示しないでしょ
368:デフォルトの名無しさん
10/05/19 12:41:11
>>364
なんかネット上に書いてありそうだけど、この本見てね。
Welcome to PowerVB
URLリンク(www.powervb.com)