Excel VBA 質問スレ P ..
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店舗で割り切れない場合
A その2店舗の最大公約数があればそれでもう1種確定
それがなければ
B @の確定カートンで割った余りを求め、その余り2つに公約数があれば確定
それもなければ
C Bの商から1減らしてあまりを求め(つか、さっきの余りに@をプラスして)、その2つに公約数があれば確定
@で、標準カートンに近いものがない場合(2とか3とかにしかならない)
強引にカートンを10にしてしまいBから以下を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やらブックの解析とか。
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
4945日前に更新/189 KB
担当:undef