2ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

●EXCEL・VBAの教えてスレ Part2●

1 :デフォルトの名無しさん:2007/01/09(火) 11:14:15
・まじめにExcelの機能を追及してみようと思う奇特なひと
・スキルがないのに無理やりVBAの仕事を押し付けられた普通のひと
・VBAなんていまさらやりたくないのに業務で仕方なく使っているひと
・とにかく漏れにこんな仕事まわすなと怒っているひと
そんなM$大好きなひとからアンチM$なひとたちまで幅広くカバーするスレです

OOoのCalcの質問もOKです

前スレ
http://pc10.2ch.net/test/read.cgi/tech/1054356121/


2 :デフォルトの名無しさん:2007/01/09(火) 11:16:39

前スレの
http://pc10.2ch.net/test/read.cgi/tech/1054356121/942

>942 :デフォルトの名無しさん :2007/01/05(金) 11:14:02
>単発質問スレなのに、何故か質問スレと勘違いした奴等が迷い込んできてるだけ
>もうすぐ1000だし、単発質問駄スレの次スレを意気揚々と立てちゃうバカも居ないだろうから
>もうちょっとで消えるさ

に触発されたので勃てた。

今は反省している。


3 :デフォルトの名無しさん:2007/01/09(火) 12:32:18
          ヽ / /⌒\
         /ヽヽ|/⌒\ii|\
       / /ヾゞ///\\|
       |/   |;;;;;;|/ハ \|
             |;;;;//⌒ヽ
             |;/( ^ω^) >>1おっおっおっ乙枯ー
.           |{ ∪  ∪
             |;;ヾ.,____,ノ
             |;;; |
             |;;;;;|
             |;;;;;|


4 :どうかご慈悲を:2007/01/09(火) 17:29:47
dσv/dx +4(kσvtanφ+Cw)/D=γω^2*(Ro+x)

変数はxとσvでこれらをExcelVBAによって倍精度ルンゲクッタ法で解くプログラムはどのようにしたらいいですか?以下の修正部分を教えてください。お願いします。物性値の依存性は無視してプログラムとしてどう修正すればよいか教えてください。
Sub 円筒部()
'Diff. Eq: F(X,Y)= ω^2*(Ro+X)*649.96*Y^0.0959-0.1*(1.1*(1-SIN(38.727*Y^(-0.0204)))*Y *TAN(28.638* Y ^(-0.04))+0.239* Y ^0.5389)
'READ INITAIAL CONDITIONS
X = Cells(4, 1).Value: Y = Cells(4, 2).Value
H = Cells(4, 3).Value: N = Cells(4, 4).Value
L = Cells(4, 5).Value: ω = Cells(4, 6).Value
Ro = Cells(4, 7).Value '
For I = 0 To N
Cells(I + 7, 2).Value = X
Cells(I + 7, 3).Value = Y
K1 = H * (ω ^ 2 * (Ro + X) * 649.96 * Y ^ 0.0959 - 0.1 * (1.1 * (1 - Sin(38.727 * Y ^ (-0.0204))) * Y * Tan(28.638 * Y ^ (-0.04)) + 0.239 * Y ^ 0.5389))
K2 = H * (ω ^ 2 * (Ro + X) * 649.96 * (Y + K1 / 2) ^ 0.0959 - 0.1 * (1.1 * (1 - Sin(38.727 * (Y + K1 / 2) ^ (-0.0204))) * (Y + K1 / 2) * Tan(28.638 * (Y + K1 / 2) ^ (-0.04)) + 0.239 * (Y + K1 / 2) ^ 0.5389))
K3 = H * (ω ^ 2 * (Ro + X) * 649.96 * (Y + K2 / 2) ^ 0.0959 - 0.1 * (1.1 * (1 - Sin(38.727 * (Y + K2 / 2) ^ (-0.0204))) * (Y + K2 / 2) * Tan(28.638 * (Y + K2 / 2) ^ (-0.04)) + 0.239 * (Y + K2 / 2) ^ 0.5389))
K4 = H * (ω ^ 2 * (Ro + X) * 649.96 * (Y + K3) ^ 0.0959 - 0.1 * (1.1 * (1 - Sin(38.727 * (Y + K3) ^ (-0.0204))) * (Y + K3) * Tan(28.638 * (Y + K3) ^ (-0.04)) + 0.239 * (Y + K3) ^ 0.5389))

X = X + H
Y = Y + (K1 + 2 * (K2 + K3) + K4) / 6
Next I

End Sub


5 :どうかご慈悲を:2007/01/09(火) 17:31:35

dσv/d(x−L) +2(Kσvtanα+2Cw)/{D-2(x−L)tanα}=γω^2*(Ro+x)
同様にこちらでは上に準じてどうすればよいでしょうか?

6 :デフォルトの名無しさん:2007/01/09(火) 20:27:08
WordVBAに関する質問です(WordにはVBAスレが無いようなので)

ExcelとWordの両方でファイルを開く・新規作成時に
ある処理hogeを行うようにしたいと考えています。
Excelではアドインファイル(xls)として保存し、XLStartフォルダに置いとけばOKでした。

WORDではテンプレートファイル(dot)を作成し、Startupにおいて試行錯誤してみましたが
起動・ドキュメントを開く・新規作成するのイベントが拾えませんでした。
作成手順等のご指導お願いします。


以下は、Excelのコードです。
Private WithEvents m_App As Application

Private Sub Workbook_Open()
Set m_App = Application
End Sub

Private Sub m_App_NewWorkbook(ByVal Wb As Workbook)
call hoge()
End Sub

Private Sub m_App_WorkbookOpen(ByVal Wb As Workbook)
call hoge()
End Sub


7 :デフォルトの名無しさん:2007/01/10(水) 00:13:05
関数全部載ってる本ない?

よくあるだろ、「よく使う関数だけしか載ってない」のが。


そうじゃないんだよ、俺がほしいのは辞書のごとき参考書なの!!


勝手に取捨選択するな、使える関数や命令全部見せろっつの!!
ショー・ミーダ・関数
だっつうの!!!!!!

8 :デフォルトの名無しさん:2007/01/10(水) 04:10:45
っ MSDN

9 :デフォルトの名無しさん:2007/01/10(水) 14:42:25
>>7
付属ヘルプに全部載ってるよ。

10 :名無し:2007/01/10(水) 15:56:07
すみません、excelのVBAでマクロを作っているのですが

まず、数値の入った表があります

その表の行を組み替えてできる表をみつけるマクロを作っているのですがまったくできる気配がありません

申し訳ないのですが助けていただけませんか??



1 0
0 1

の場合で2行2列の表を見つける

1 0  1 0  0 1  0 1
1 0  0 1  1 0  0 1

の4つできます

この例では1行目は10、2行目は01で出来ているのでこれの組み替えでできるのは4つになります


11 :名無し:2007/01/10(水) 15:57:34
先ほどの例

1 0
0 1

の場合で3行2列の表を見つける

1 0  1 0  1 0  0 1  1 0  0 1  0 1  0 1
1 0  1 0  0 1  1 0  0 1  1 0  0 1  0 1
1 0  0 1  1 0  1 0  0 1  0 1  1 0  0 1

のようになります

わかりにくい説明なのですがよろしくお願いします

12 :デフォルトの名無しさん:2007/01/11(木) 07:25:18
silver-mealをvbaで書きたいのですが
プログラムができません。
どなたか教えてください!!!!
よろしくお願いします。

Compute
Calclulate THC(k) which is the actual comulative inventory-holding cost for the first k period if d(k) is ordered at the beginning of the first period.
Compute TC(k)=THC(k)+C0.
Find k*=min{k:TH(k)/k ≦ TC(k+1)/(k+1)}.
Renumber the period numbers and repeat from 1 until all N periods are covered.
Total Cost =$1260

week 1 2 3 4 5 6 7 8
demand 20 20 30 40 140 360 500 540
order 70 0 0 180 0 360 500 540
ending inbentory 50 30 0 40 0 0 0 0

13 :デフォルトの名無しさん:2007/01/11(木) 12:34:40
シート開いた瞬間に文字入力ボックスを自動で発生させたいときはどうすればいいのですか


普通にやると、どこかのセルをダボークリッキンとかすることがトリガーになるじゃないですか
そういうことを何もせずとも出したい。

14 :デフォルトの名無しさん:2007/01/11(木) 18:04:39



Excel VBAに関する質問はここで↓

Excel総合相談所 52
http://pc10.2ch.net/test/read.cgi/bsoft/1167923180/





VBAとして実行するとしても、Excelの操作に関係ない場合はここで↓

VBプログラマ質問スレ(6.0以前) Part50
http://pc10.2ch.net/test/read.cgi/tech/1161517193/





回答が要らないネタの場合はここで↓

●EXCEL・VBAの教えてスレ Part2●
http://pc10.2ch.net/test/read.cgi/tech/1168308855/




15 :どうかご慈悲を:2007/01/11(木) 18:27:01
dσv/dx +4(kσvtanφ+Cw)/D=γω^2*(Ro+x)
dσv/d(x−L) +2(Kσvtanα+2Cw)/{D-2(x−L)tanα}=γω^2*(Ro+x)
解析的には解けないのでルンゲクッタ法で解きます。
初期条件は(1)がx=0、σv=σ₀、γ=γ₀
     (2)のσv、γはx=Lにおける(1)の解
これのEXCEL VBAプログラムをお願いします。
正直時間がないのでどうか今週中にお願いできませんでしょうか。自分ではにっちもさっちも行きません。
この先に進めないと本当に危ないんです。

16 :デフォルトの名無しさん:2007/01/11(木) 19:59:28
>>15
学校の宿題?

17 :デフォルトの名無しさん:2007/01/11(木) 22:17:56
おまえがそんな問題も解けずにそのまま先に進んでしまう方が危ないと思う


18 :デフォルトの名無しさん:2007/01/11(木) 22:24:07
Excelの命令集 -> ヘルプで完璧

OpenOffice Calcの命令集


は?

19 :デフォルトの名無しさん:2007/01/12(金) 05:38:03
>>18
OpenOffice Calcの命令集 -> ソース見れば細かい仕様まで確認できて超完璧

20 :デフォルトの名無しさん:2007/01/13(土) 03:25:55
C#出来たらVBいらん気がする
VBAもC#のどっちか選択で書ければいいのに・・・・

21 :デフォルトの名無しさん:2007/01/13(土) 22:49:19
ヤフーのサイトを使って
セルに名入力された名称から株や証券のコードを検索、取得したい
データ取得のwebクエリ使うとなぜか関係ないコードを取得してしまう
vbaを使ってhtmlをexcelで開いてそこからコードを引っ張ろうと思う
shift-jis→url文字列(euc)の変換は上手くいってるのだが
Workbooks.Open FileName:=f_name
の形式で開くと文字化けしてしまう(urlに渡している文字列が)
楽天はOKだったけどミツウロコはミツウ・然ってなっちまう

f_nameの文字列をコピーして
ブラウザのアドレスバーに入力すると
正常に検索結果画面が得られる

助けて〜

22 :21:2007/01/13(土) 23:35:12
age

ttp://quote.yahoo.co.jp/l?s=名称
でその名称を含んだコードが取得できる

webクエリの方法かopenする方法
ご存知の方、教えてください

23 :デフォルトの名無しさん:2007/01/14(日) 00:53:01
excel VBAでシート上のテキストボックスを全部取得したいのですけど、
worksheets.shapes(i).textboxes
で i で ループさせるとどうしてもあるインデックスだけ
エラーになってしまいます。

何が考えられますか?

24 :デフォルトの名無しさん:2007/01/14(日) 02:25:28
HasTextFrameプロパティ?


25 :デフォルトの名無しさん:2007/01/14(日) 12:56:30
こんにちわ。
for文なんですが、たとえば
for i = 2 to 3 and 5
for j = 1 to 3
strAns(j)= cells(1,i).value
next
next
で、2,3,5がA,B,Cだとして、strAnsにA+B+Cを表示させたいのですが出来ないんです
2,3,5が数値なら出来るのですが、どなたか助けてください。

26 :デフォルトの名無しさん:2007/01/14(日) 14:01:32
cells(1,1)
range("A1")
range(cells(1,1))

は同じセルを指す

27 :デフォルトの名無しさん:2007/01/14(日) 14:37:04
>25
文字列を連結するときには”+”じゃなく”&”を使うって事は理解できてるのかな。

28 :デフォルトの名無しさん:2007/01/14(日) 17:29:22
>>25
はい。+1は。
表示させたいのは”ABC"なんです。

29 :デフォルトの名無しさん:2007/01/14(日) 17:31:44
>>25
書き込みまちがえました
&を理解してませんでした。

30 :デフォルトの名無しさん:2007/01/14(日) 17:49:15
&を使ったら表示できた

安堵する

by 安藤

と思ったらアンドゥしてしまいました

ヌあんだと

31 :デフォルトの名無しさん:2007/01/15(月) 01:22:31
>24
ありがとう。そんなのがあったんですね。
チェックせずに回してた。

32 :デフォルトの名無しさん:2007/01/15(月) 20:31:23
>>31
excelにはない罠

33 :デフォルトの名無しさん:2007/01/16(火) 00:50:35
0から10までの偶数の合計を表示させるには
どうしたらいいかわかる人いますか?


Sub 合計()
Dim intcount As Integer
Dim inttotal As Integer
For intcount = 0 To 10 Step 2
MsgBox intcount

Next
End Sub

これだと0から10までの偶数が並べられるだけで足されません。

34 :デフォルトの名無しさん:2007/01/16(火) 04:25:46
Sub 合計()
  Dim lngCount As Long
  Dim lngTotal As Long

  For lngCount = 0 To 10
    If (lngCount Mod 2) = 0 Then
      lngTotal = lngTotal + lngCount
    End If
  Next lngCount
  MsgBox lngTotal
End Sub

35 :デフォルトの名無しさん:2007/01/16(火) 10:05:07
こんにちは。質問させてぐださい。
アンマネージのC++で作成したDLLを呼び出したいのですが、
VBAでプロトタイプ 宣言する時に、DLLのパスを指定しますよね。
普通、絶対パスか環境変数でPATHの通っているところにDLLを置きますが、
このパスをエクセルファイルを基準に相対パスで指定したいのですがなかなか上手くいきません…。
そもそもこれって可能なのでしょうか?
あともう一つ、VBAの参照設定に参照したいDLLを登録しても、結局絶対パスにしなければいけないのは変わらないですよね…。

やりたいことを要すると、
エクセルファイルと同じディレクトリにDLLを置いていれば、
どこにそれらを置いても動作してくれるようにしたいのです。

VBAを動作させる環境はEXCEL2000です。
変なこと言ってるかもしれませんがよろしくお願いします…。

36 :デフォルトの名無しさん:2007/01/16(火) 10:20:35
ブックのパスを取得する方法も知らないの?

37 :35:2007/01/16(火) 10:35:20
>>36
回答ありがとうございマッスル
VBAのコードを実行させたときにブックのパスを取得する方法はわかるんですが、
プロトタイプ宣言時にブックのパスって取得できるんでしょうか?

38 :デフォルトの名無しさん:2007/01/16(火) 10:54:07
うん
まぁがんばれ

39 :35:2007/01/16(火) 11:34:41
Private Declare Function TestSub(ByVal InputPath As String) Lib "Test.dll" As Integer

で、TestSubを呼び出す前に

ChDrive ActiveWorkbook.Path
ChDir ActiveWorkbook.Path

をして

TestSub("test")

で行けました。
ありがとうございました。

40 :デフォルトの名無しさん:2007/01/16(火) 19:17:49
For i to 〜〜 Next で、1つの行のセルの値をひとつずつ取得して変数に代入したいのですが、
Forで使っている i をセルの位置を指定する数字として使用するにはどうすればいいのでしょうか?

(変数)=Range("A"i).Value や
(変数)=Cells(i , 2).Value と試してみたのですがダメでした。


41 :デフォルトの名無しさん:2007/01/16(火) 19:29:40
> (変数)=Range("A"i).Value
は文法的に間違ってるから当然ダメだが、
> (変数)=Cells(i , 2).Value
はB列のi行を取得できるはずだが。

ダメならちゃんとブック、シートも指定してみろ。
それらを表略した場合の動作は、コードを書いたモジュールによって異なるからな。

42 :40:2007/01/16(火) 19:45:06
>>41
レスありがとうございます。
やはり Cells(i,2).Value でもエラーが出ました。一応プログラムを載せてみます。
Sub count256()

Dim i As Integer
Dim a As Integer
Dim b As Integer
Dim c As Integer

c = 0
For i = 2 To 1883
a = Cells(i, 3).Value
b = Cells(i, 4).Value
If a >= 256 Then
If b >= 256 Then
c = c + 1
End If
End If
Next i

Cells(7, 1).Fomula = c

End Sub

ブックとシートの指定はどこでやればいいのでしょうか?

43 :40:2007/01/16(火) 20:07:03
すいません、ただたんに変数宣言でInteger と Double を間違えているだけのようです。
エラーがセル指定のところだったので勘違いしていました・・・

44 :デフォルトの名無しさん:2007/01/16(火) 22:15:17
VBEをVBAから弄るためにはどうすればいいですか?

45 :45:2007/01/17(水) 16:33:10
EXCEL-VBAのマクロでソルバーを起動、計算させるコードを書こうと思っています。
(Microsoft Excel 2000)
「参照設定」で「solver.xls」を読み込んだ後、プロジェクトウィンドウ欄に「solver.xla」
が出てきたのでダブルクリックしたのですが、「パスワードを入力してください」というメッセージが
出てきてコードを表示できません。
もともとここをいじらずにVBAプロジェクト上でソルバー起動のコードを書くのでしょうか?
教えてください。



46 :デフォルトの名無しさん:2007/01/17(水) 16:47:52
標準で付いてくるソルバーはワークシート上で使うものであって
VBAで使うものじゃないからな。当然コードは非公開。

47 :45:2007/01/17(水) 19:05:33
>>45
なるほど
プロジェクト上でフツーにコード書いたらソルバー動かせました。
ありがとうございました。

48 :デフォルトの名無しさん:2007/01/19(金) 15:50:11
どなたかバブルソートのプログラムを教えて頂けないでしょうか?
(例えば5つの数字を小さい順に並べ替えるというもの)

49 :デフォルトの名無しさん:2007/01/19(金) 16:06:29
>>48
Web上にサンプルコードが転がってるだろ

50 :デフォルトの名無しさん:2007/01/19(金) 16:18:56
Visual Basicで出力結果をExcelで表示させるプログラムを教えて下さい。

51 :デフォルトの名無しさん:2007/01/19(金) 16:21:57
>>50
VBプログラマ質問スレ(6.0以前) Part50
http://pc10.2ch.net/test/read.cgi/tech/1161517193/

52 :デフォルトの名無しさん:2007/01/20(土) 12:32:43
どっかの宿題スレで見たぞ
マルチじゃないのか?


53 :デフォルトの名無しさん:2007/01/21(日) 23:18:46
コンボボックスに複数のセル範囲の値をリスト表示させるには
どうしたらいいの?
ListFillRangeプロパティに指定しても受け付けてくれない。


54 :デフォルトの名無しさん:2007/01/21(日) 23:37:48
>>53
AddItemで入れてきゃいいじゃん。
コンボボックスってのは元々コードでアイテムを設定するものだから。

55 :エクセル楽しい♪:2007/01/22(月) 01:22:42
ExcelVBAでWindowsMediaPlayer9を制御したいのですが、命令がわかりません。
おわかりになる方はお教えいただければ幸いです。

◆やりたいこと
ユーザーフォームのテキストボックスにテキストを入力して、
「画像表示」ボタンを押すと、テキストに対応する動画像が表示される
ようにしたい。

◆困っていること
ユーザーフォーム上でテキストを入力して、「画像表示」ボタンを押した後、
さらに、同じくユーザーフォーム上のWindowsMediaPlayerの画面の「再生」
ボタンを押さないと再生できない。
「画像表示」ボタンを押せば再生できるようにしたい。

◆状態
ユーザーフォーム上に、「ツール」→「その他のコントロール」で
WindowsMediaPlayerを埋め込んでいます。
そして、フォームのコードを下記のように書いています。
Private Sub cbGazouhyouji_Click()
  〜中略〜
With main.WindowsMediaPlayer
.URL = "C:\XXXXXX\" & XXXX & ".MOV" ←ここまでは正常に動く
'.status = "再生中"        ←ここが違っているようです
End With
  中略
End Sub

◆条件
ExcelVBAだけでできることが希望です。他にツールや高度な技術が必要な
場合は、できないということで結構です。

56 :デフォルトの名無しさん:2007/01/22(月) 03:39:32
無限ループになったらどうすればいいですか?
タスクマネージャで終了させたらコードが全部

57 :デフォルトの名無しさん:2007/01/22(月) 03:45:55
無限ループさせなきゃいいだべさ
保存してから実行すればいいだべさ

58 :デフォルトの名無しさん:2007/01/22(月) 04:25:20
Escキー押してみるといいだよ

59 :デフォルトの名無しさん:2007/01/22(月) 04:49:47
Ctrl+Break

60 :デフォルトの名無しさん:2007/01/22(月) 16:33:48
ボンボボックスってなんですか。

61 :デフォルトの名無しさん:2007/01/22(月) 17:07:51
>>55
スレ違い

62 :デフォルトの名無しさん:2007/01/23(火) 08:53:19
すいません画像の色情報に関して質問なんですが

今はApplication.CommandBars("Picture").Controls.Item(12).Executeを出して
手動で透明にしてから
色情報 = Selection.ShapeRange.PictureFormat.TransparencyColor
を出しています。

これを自動で透明にしたいのですがどうやればいいのでしょうか?

63 :デフォルトの名無しさん:2007/01/23(火) 09:26:33
>>62
普通に

64 :デフォルトの名無しさん:2007/01/23(火) 18:46:06
>>63
Win32APIのGetPixelで解決しました。ありがとうございました。

65 :デフォルトの名無しさん:2007/01/24(水) 01:02:18
初心者すぎる質問ですが;
セルの数値を +1 するようなマクロを、マクロボタンに登録して、マクロボタンをクリック
する度に、セルの数値を増加させるというようなマクロってどう書けばいいの?

66 :デフォルトの名無しさん:2007/01/24(水) 01:11:42
>>65
マクロボタン作って

Private Sub CommandButton1_Click()

Cells(1, 1) = Cells(1, 1) + 1

End Sub

でおk

67 :デフォルトの名無しさん:2007/01/24(水) 01:20:06
できました
ありがd

68 :デフォルトの名無しさん:2007/01/24(水) 11:49:50
ExcelVBAで、TextBoxの中にある文字列をShift+Enterで改行した時、
TextBox内の上の行と下の行との間隔を設定する方法、ご存じの方おられませんか?


69 :デフォルトの名無しさん:2007/01/24(水) 11:56:52
>>68
それはTextBoxの領分ではなくRichTextBoxの領分だ
ちゃんと目的にあったコントロールを使おう

70 :デフォルトの名無しさん:2007/01/24(水) 13:48:02
>>69
解答ありがとうございます。
早速調べてみたのですが、現在の環境WinXP・Excel2000(VBA6)では
Microsoft Rich Text Box Controlが無いようです(参照設定の中にありませんでした)

何か他の方法ないでしょうか?
お手数お掛けします


71 :デフォルトの名無しさん:2007/01/24(水) 14:13:15
>>70
「参照設定」ではなく「その他のコントロール」だぞ
いったい何を調べてるんだか┐(´ー`)┌

そこにも無ければ導入すればいいだけの話

72 :デフォルトの名無しさん:2007/01/24(水) 14:49:55
>>71
何度もすみません・・・orz

「その他のコントロール」が押せません
何か間違ってますか?

73 :デフォルトの名無しさん:2007/01/24(水) 14:54:18
当然ツールボックスを表示した状態じゃないと押せないけど

74 :デフォルトの名無しさん:2007/01/24(水) 15:00:18
なんか次は

RichTextBoxでの行間設定はどうやるんですか?

とか言い出しそうだな
先に言っておくが、そのくらい調べられない奴はVBA使うな

75 :デフォルトの名無しさん:2007/01/24(水) 15:01:18
>>73
フォームをわざと挿入し、ツールボックスを表示したところ
無事その他のコントロールが触れるようになり、RichTextBoxコントロールの追加に成功しました。

本当にありがとうございました!

76 :デフォルトの名無しさん:2007/01/24(水) 15:01:58
>>74
行間設定もきっちりできました、ありがとうございました

77 :デフォルトの名無しさん:2007/01/25(木) 20:44:26
すげー!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!


今まで
「エクソーメァクーロ(英語は発音大事)なんか組めてもC++にゃかなわねえんだよ」
と思ってたわけだが、
マクロ組んでやると存外にも仕事場での受けがよい。


78 :デフォルトの名無しさん:2007/01/25(木) 20:47:40
=(A1,A2)
とかするじゃない

こげなもんば、大したことなかったい。
が、見てみい。
「ほー!!!!!!!!!!!!!!!!!!!!!!!!!! 便利なもんさ!!!!!!!!!!!!!!!!!」

とか喜んでくれよる。
こらすごか。

79 :デフォルトの名無しさん:2007/01/26(金) 06:41:08
数百個のチェックボックスを一列に配置したとき
for i= 〜to 〜文の中で「i」番目のチェックボックスの値を取得するのは
どうしたらいいんでしょうか?
例えば
for i = 1 to 300
if = 「i」番目のcheckbox= true then
cells(i,2).value=cells(i,2).value+1
end if
next i
というようにしたいんですが
ヘルプやらググルやら見てみたんですが
分かりませんでした


80 :デフォルトの名無しさん:2007/01/26(金) 07:47:17
>>79
VBならコントロール配列使うところだが、VBAのコントロールではコントロール配列に出来ないので、
連番名(標準のCheckBox1, CheckBox2, …で良い)にしておいてControlsコレクションを使う
Controls("CheckBox" & i)
イベントも取りたい場合はクラスで疑似コントロール配列を実装する

つーか、何百個ものチェックボックスを配置するインターフェイスを見直した方がいいと思うけどね
予測するに、ListBoxを
ListBox.MultiSelect = fmMultiSelectMulti
ListBox.ListStyle = fmListStyleOption
と、「複数選択可 & チェックボックス有り」で使えば済む話なんじゃないの?
ListBox.Selected(i)でチェック状況取得できるし

81 :デフォルトの名無しさん:2007/01/26(金) 23:26:09
テキストを読み込みたいんです。

123 123 123 123
123 123 123 133

みたいなのは Line #で読めたんですけど

123 123 132 123 123↑123 123 132 123 123↑・・・

こういうデータは読み込めません。↑は何なのか、わかりません。
改行されてないデータはどうしたら読み込めるんでしょう?

検索しようにも↑の記号の読み方がわかりません。お手上げです。

82 :デフォルトの名無しさん:2007/01/26(金) 23:40:22
>>81
> ↑は何なのか、わかりません。
お前は解るはずだ。というか調べる手段があるはずだ。
それが何なのかはバイナリエディタで見れば一目瞭然だからな

逆にこっちがわかんねーっつうの。
文字としての↑(81 AA)だってならわかるが、Line #で読めないってことは 81 AA では無いわけで
特殊文字の表現記号ならエディタによって表示が異なるので、お手上げです。

83 :デフォルトの名無しさん:2007/01/26(金) 23:45:40
↑は本当はもっと横につぶれたような形をしており

コピーしてペーストすると消えてしまう謎の文字です。

バイナリエディター・・・?

調べてみます。

84 :79:2007/01/27(土) 11:00:26
>>80
さっそくの回答ありがとうございます
ですがcontrols("checkbox"&i)ではエラーになりました(subまたはfunctionが見つかりません)
もしかしてワークシート上に直接配置したcheckboxだとダメですか?

実際には900行×20列の表(900人分顧客データみたいなもの)
から今回対象になる人を範囲でえらび(100番目から200番目等)
さらにその中から対象から外したい人を最左列に配置したチェックボックス
で選択して残った対象者だけで別の表を作成するというようなプログラムを組みたかった
のですが、リストボックスの方法だとちと選びづらいです
>>つーか、何百個ものチェックボックスを配置するインターフェイスを見直した方がいいと思うけどね
 おっしゃる通りですね(´・ω・`)

素直に左端に1か0を入力することで判別する方がいいかもです
チェックボックス900個も置いたらめちゃくちゃ重くなったし
 
 




85 :デフォルトの名無しさん:2007/01/27(土) 11:50:41
>>84
シート上ならOLEObjectsコレクションだ
objSheet.OLEObjects("CheckBox" & i).Object.Value

Shapesコレクションからも辿れるけどね
objSheet.Shapes("CheckBox" & i).OLEFormat.Object.Object.Value

> 素直に左端に1か0を入力することで判別する方がいいかもです
の方法でも、表示形式を [=0]"";[=1]"●" とかにすれば解りやすいし

' A列をダブルクリックしたらチェック反転
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
  If Target.Column <> 1 Then Exit Sub
  Target.Value = 1 - Target.Value
  Cancel = True
End Sub

' A列を含む範囲を右クリックしたら、その範囲全てのチェック状態を、選択範囲の一番上を基準に反転
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
  If Target.Column <> 1 Then Exit Sub
  Target.Resize(, 1).Value = 1 - Target.Cells(1).Value
  Cancel = True
End Sub

などを使えば、マウスでチェック状態の切替が出来る
●の変わりに☐☑を使うことも可能
Range("A:A").NumberFormat = "[=0]""" & ChrW(9744) & """;[=1]""" & ChrW(9745) & """"

86 :デフォルトの名無しさん:2007/01/27(土) 15:05:41
>>81
何らかの制御コードだろ。そのテキストを作った香具師に聞けば?
#なんとなく、改行コードの問題な希ガス。

87 :デフォルトの名無しさん:2007/01/27(土) 16:18:50
VBAの命令の意味と
記述方法が書いてある辞典的なページってありませんか?



88 :デフォルトの名無しさん:2007/01/27(土) 16:43:58
>>87
付属のVBAヘルプ

89 :デフォルトの名無しさん:2007/01/28(日) 02:19:41
do Until xxxx <> vbnullstring
のときの
<>っていうのはどういういみですか

=とは違うの?

90 :デフォルトの名無しさん:2007/01/28(日) 02:23:31
>>89


91 :デフォルトの名無しさん:2007/01/28(日) 02:50:28
>>89
=とは逆の意味

92 :デフォルトの名無しさん:2007/01/28(日) 09:27:17
excelのVBEを開こうとすると、VBEを開けるどころかexcelそのものが閉じてしまいます。
ウィルススキャンをしたところウィルスに感染はしていませんでした。

OS:Windows2000でexcelはexcel2000です。ちなみにwordのVBEは普通に開けます。

どうすれば正常にVBEが開けるようになれば良いのか、よろしくお願いします。

93 :デフォルトの名無しさん:2007/01/28(日) 09:30:28

do Until xxxx <> vbnullstring

do While xxxx = vbnullstring

同じ意味と考えてもいいですか?


94 :デフォルトの名無しさん:2007/01/28(日) 09:51:59
>>92
とりあえずブックを全て閉じた状態で試していないならブックを全て閉じてからVBEを立ち上げろ
同じく、アドインも全て外した状態で試してないなら一度全て外せ
それでダメならExcel(Office)の再インストール
上書きインストールではなく一度アンインストールしてから再インストールね
それでもダメならOS再インストール

まさかこの板に来る奴が再インストール出来ないとか面倒とかは言わないだろ

>>93
結果は同じだけど意味は違う

95 :92:2007/01/28(日) 10:01:56
>>94
ご返信ありがとうございます!

一応Officeの再インストールは既に行いましたが、駄目でした。

ちなみにVBEのみの起動はどうすればよいのでしょうか?

やっぱりOSの再インストールしかないんでしょうかねぇ。。。

96 :デフォルトの名無しさん:2007/01/28(日) 11:28:10
>>95
まぁがんばれ

97 :デフォルトの名無しさん:2007/01/28(日) 14:31:36
EXCEL2000で
イベントプロージャー「テキストボックス名_Change」を作成したいのですが

図形作成→テキストボックスで
テキストボックスを作成したのですが

右クリックしてもコードの表示は出ません。(本には書いてあるのですが)
2000だと他の方法にしないといけないのですか


結果として
Private Sub TextBox1_Change()
をかくようにしたいのですが

98 :デフォルトの名無しさん:2007/01/28(日) 14:36:44
>>97
今2000で試したけど、ちゃんと出たよ。

99 :デフォルトの名無しさん:2007/01/28(日) 15:04:36
コントロールツールの方だと「プロパティ・コードの表示」がある
フォームコントロールの方だと「マクロの登録・コントロールの書式設定」がある

イベントが使えるのはコントロールツールの方
右クリックして「マクロの登録・コントロールの書式設定」が出るなら、間違った物使ってるだけ
「プロパティ・コードの表示」も「マクロの登録・コントロールの書式設定」も出ないならPCを窓から投(ry

100 :デフォルトの名無しさん:2007/01/28(日) 15:05:38
できましたあああ。ありがとうございます!
ですが最終的にこっちの方法を採用させていただきました。
>表示形式を [=0]"";[=1]"●" とかにすれば解りやすいし

> A列をダブルクリックしたらチェック反転
>Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
>  If Target.Column <> 1 Then Exit Sub
>  Target.Value = 1 - Target.Value
>  Cancel = True
>End Sub

大変有益なご教示大感謝です

101 :79:2007/01/28(日) 15:06:46
ミスッタ_| ̄|〇
上の100は>>85さんへのレスです

102 :デフォルトの名無しさん:2007/01/28(日) 15:10:48
>>98
>>99
できました
フォームコントロールの方で書いてましt

103 :102:2007/01/28(日) 15:11:19
ありがとうございました


104 :デフォルトの名無しさん:2007/01/28(日) 18:28:12
http://vista.crap.jp/img/vi6997563313.jpg

105 :83:2007/01/28(日) 19:38:04
矢印の正体はLFってやつでした。chr(10)とやらなんやら

なるほど・・・CR+LFじゃないとダメ・・・

まだ読み込めないけど、手がかりはつかめたんで頑張ってみます。

106 :デフォルトの名無しさん:2007/01/28(日) 21:47:19
2007ってデフォルトフォーマットではマクロは保存できないんだな、店頭デモ機で試してみたんだが
VBAは後方互換で残ってるだけなの?

107 :デフォルトの名無しさん:2007/01/29(月) 00:23:36
>>106
オプションで開発タブをリボンに表示するにチェックを入れると使えるよ

108 :デフォルトの名無しさん:2007/01/29(月) 15:41:15
べき算って
2の2乗=4
3の3乗=27ってことですか?

109 :デフォルトの名無しさん:2007/01/29(月) 16:32:45
冪乗とはいうけど冪算とは余り言わない希ガス。

110 :デフォルトの名無しさん:2007/01/29(月) 21:56:03
今ExcelのマクロはほとんどVBAになっちゃってるけど、ブックにシートを追加するときに
Excel4.0のマクロシートが残ってることがわかる。やってみたいけど、誰かマスターする
方法おしえてくれないかな?解説書は売り切れてるしネットでも見当たらない。せっかく
残ってる機能だから眠らせておくのは惜しい。

111 :デフォルトの名無しさん:2007/01/29(月) 22:29:47
2列のセルの文字列を一つにすることは可能?

セルA  セルB
桃     太郎    =桃太郎

112 :デフォルトの名無しさん:2007/01/29(月) 22:54:34
>>111
可能だ。=CONCATENATE("桃","太郎")とすればいい。
セルA=桃、セルB=太郎なら、=CONCATENATE(セルA,セルB)でもいい。
セルが3つ以上でもやり方は同じだ。

113 :デフォルトの名無しさん:2007/01/30(火) 00:00:45
>>112
それのどこがVBA?
このスレ的にはVBAで応えるべきなんじゃないのか?

114 :デフォルトの名無しさん:2007/01/30(火) 00:51:21
Word/VBAの教えてスレはどこ?

115 :デフォルトの名無しさん:2007/01/30(火) 00:53:40
ありがとうございます



116 :デフォルトの名無しさん:2007/01/30(火) 16:21:57
すみません、ちょっと教えて下さい

マクロで、指定したセルにチェックボックスを作ったり、削除したりするには
どう書けば良いのでしょう?
VBA駆け出しで、全く分かりませんorz

117 :デフォルトの名無しさん:2007/01/30(火) 18:12:08
>>116
マクロの記録を録ってみろ

その記録されたコードを見てわからなければお前にはまだ早い
精進して出直せってことで

118 :デフォルトの名無しさん:2007/01/30(火) 22:59:22
>>116
表示→ツールバー→VISUAL BASIX
出ないことを祈る

119 :デフォルトの名無しさん:2007/01/30(火) 23:05:19
>>111
>>112を転用で、
Application.WorksheetFunction.CONCATENATE(セルA,セルB)

VBA的に
セルA.value & セルB.value 又は セルA.value + セルB.value
&だと文字列+数値が可。+だと不可
CStr(数値) + 文字列だと文字列として結合

>116
作るのは>>117の言うとおり。
ぐぐるなら[OLEObject]もしくは[Shape]
削除はデザインモードじゃないときにやるとエクセルが壊れる。
デザインモードでなら.Deleteとか.Cutで消える。

中途半端だがかんべん。

120 :デフォルトの名無しさん:2007/01/30(火) 23:55:15
はじめまして、早速一つお聞きしたいことがあります。
Function関数において最終的に表示される文字列を、
「その関数を使ったセルとは別のセル」に表示させたいのですが
どのような式を打ち込めばよいでしょう?

121 :デフォルトの名無しさん:2007/01/31(水) 00:09:06
>>120
Sub abc()
Dim str As String
str = test
Worksheets("Sheet2").Range("A1").Value = str
End Sub

Function test() As String
test = "返り血"
End Function

こういうこと?

122 :デフォルトの名無しさん:2007/01/31(水) 00:37:35
ありがとうございます。まさかこんな早くに答えていただけるとは思いませんでしたので驚きました。
よろしければもう一つだけお聞きしたいのですが、任意のセルをそのつど入力し
そのセルに表示させたい場合はどうしたらよいでしょう?

123 :デフォルトの名無しさん:2007/01/31(水) 00:56:22
>>122
よくわからんのだけども、
任意のセル(入力するセル)の指定方法:
@クリック→任意のWorkSheetのマクロを開いて、マクロ書くスペースの左上にある
ちっちゃいコンボボックス的なやつの値を[WorkSheet]に設定、そのとなりのボックスの値を
[SelectionChange]に設定(ディフォルト)
したら、
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

End Sub
ができるから、ここに
Target.value = "返り血"
Targetは引数ね。ちなみにThisWorkBookのまくろで同じの作るとすべてのシートに適応される。
Aセルの値→
上と同じ感じで、左[WorkSheet]右[Change]に設定
Private Sub Worksheet_Change(ByVal Target As Range)

End Sub
ができるからここに、
If Target.Row = 1 And Target.Column = 1 Then
Range(Target.Value).Value = "返り血"
End If
A1のセルの値にB2とか入れるとそのセルに返り血って入る
弱点はセル以外の値を入れるとエラーになる。克服はできるはず、考えないけど。
Bユーザーフォーム→
ぐぐってちょ。

こんなもんで。

124 :デフォルトの名無しさん:2007/01/31(水) 01:01:51
いただいたヒントのおかげで何とかなりそうです。
稚拙な説明にもかかわらず丁寧に答えてくださり本当にありがとうございます。


125 :デフォルトの名無しさん:2007/01/31(水) 10:03:27
excelのvbaで松井証券へ自動ログインするプログラムを組んでいるのですが
下のプログラムの最後の objIE.document.frames("CT").document.All("kidouButton").Click で
たまにエラーが出ます。エラーの原因は何かわかりますでしょうか。
下記のプログラムは、松井証券へログインし、松井証券の会員ページから
ネットストックハイスピードというソフトウェアを起動するためのものです。

Declare Sub Sleep Lib "KERNEL32" (ByVal dwMilliseconds As Long)
sub 時間待ち()  'ページの読込が終わるまで待機するための処理。
Do Until objIE.Busy = False
Sleep (200) 'CPU負荷軽減のために0.2秒間隔でIEオブジェクトをチェック。
Loop
End sub

(つづく)

126 :デフォルトの名無しさん:2007/01/31(水) 10:05:56
(続き)

Sub netstock()
Set objIE = CreateObject("InternetExplorer.application")
objIE.Visible = True
objIE.Navigate "https://www.deal.matsui.co.jp/ITS/login/MemberLogin.jsp"
call 時間待ち

'松井証券サイトのフォームへ、ワークシートに書かれたIDやパスなどのデータを流し込む
  objIE.document.forms("form").clientCD.Value = Worksheets("松井証券へ自動ログイン").Range("C2").Value
objIE.document.forms("form").passwd.Value = Worksheets("松井証券へ自動ログイン").Range("C3").Value
objIE.document.forms("form").easyTradeFlg(0).Checked = True
objIE.document.forms("form").submit
call 時間待ち

'松井証券ログイン後、会員ページからソフトウェアを起動するためのページへ移動
   Set objFDOC = objIE.document.frames("LM").document
For n = 0 To objFDOC.Links.Length - 1
If objFDOC.Links(n).outerText = "ネットストック・ハイスピード" Then
objFDOC.Links(n).Click
Exit For
End If
Next n

  call 時間待ち

'ボタンを押してネットストックハイスピードを起動する
objIE.document.frames("CT").document.All("kidouButton").Click

End Sub

127 :デフォルトの名無しさん:2007/01/31(水) 14:47:31
セルAに入力した

Taka Toshi

という文字列を

taka_toshi

というように
小文字化と半角空白にアンダーバーを挿入して変換するようにしたいのですが
どうすればいいですか?


128 :デフォルトの名無しさん:2007/01/31(水) 15:21:21
Replaceで半角スペースを_に置換して
LCaseで小文字化すればいいだけじゃん
このくらいならワークシート関数でも出来るし

129 :デフォルトの名無しさん:2007/02/01(木) 22:29:54
>>125
理由はわからなそうだけども、
なんていうエラーがでてるのかはとても知りたいのでお願いします。

でも、もしかしたらもしかしたら、

Navigateで読み込み→
読み込みはじめるより先に Do Untilの条件へ行ってしまい
Sleepしない→
読み込まれる前にクリック

かも。
ループの前にSleepを入れてみてはいかかでしょう?

適当で申し訳ない。

130 :デフォルトの名無しさん:2007/02/01(木) 22:30:48
さらにごめん。

Navigateで読み込みじゃなくて、
クリックで画面変更だ。

131 :デフォルトの名無しさん:2007/02/01(木) 22:55:40
今日初めてExcelでマクロを作ろうとしてみました。

引数を2つ取る関数を作りたいのですが意味不明のエラーが出て
動きませんでした。

Public Sub Test()
Test2 (1, 2)
End Sub

Sub Test2(a As Integer, b As Integer)
MsgBox (a + b)
End Sub

引数を1つにすると動きます。
どこがおかしいのでしょうか?

132 :デフォルトの名無しさん:2007/02/01(木) 23:27:48
>>131
VBAは自分で作った関数を使う際、
引数にかっこをつけてはいかんのです。
ので、
Test2 1, 2
で。

133 :デフォルトの名無しさん:2007/02/01(木) 23:48:14
call

134 :デフォルトの名無しさん:2007/02/01(木) 23:53:32
こんばんわ。
質問です。

1  ○○  0:00     
2  ○○  1:00
3  ○○  2:00
4  ○○  3:00
5  ○○  4:00
6  ○○  5:00



25 ○○  0:00


49 ○○  0:00

73 ○○  0:00

という、一時間ピッチのデーターがあります。一年分くらい。
それを、毎正時だけ欲しいのです。2〜24、26〜48の行を白紙の行に
したいのですが、この説明で分かってくれるかたいますか?
ご指導ください。




135 :デフォルトの名無しさん:2007/02/02(金) 00:03:20
>>134
出力するシート名は?

136 :デフォルトの名無しさん:2007/02/02(金) 00:10:24
> VBAは自分で作った関数を使う際、
> 引数にかっこをつけてはいかんのです。
ハズレ

自作関数の場合ではなく、基本的にSub、Functionプロシージャ(メソッド)を呼ぶ場合、
戻り値を取る場合とCallで呼ぶ場合以外は()を付けない。MsgBox関数の場合だとこんな感じで使う。
[1] MsgBox "test", vbOkOnly
[2] Call MsgBox("test", vbOkOnly)
[3] ret = MsgBox("test", vbOKCancel)

自作関数の場合でも戻り値を取る場合とCallで呼ぶ場合は()付けなきゃダメだし
自作関数じゃなくても、[1]のように使うときは()付けてはいかんのです。
ややこしいのは、引数一つの関数の場合。
[4] Inc hoge
[5] Inc (hoge)
Sub Inc(Value As Long)
  Value = Value + 1
End Sub
[4]の方だと変数hogeが+1され、[5]の方だと変化しない。
引数一つの関数をCallを省略し引数に()を付けて呼ぶと、引数は値渡しになる。
基本的に参照渡し値渡しは呼び出される側で指定するので、[5]は殆ど使われない。
意味も知らずに間違って使ってる奴は居そうだけどな。

137 :デフォルトの名無しさん:2007/02/02(金) 00:13:03
>>135
潮位というシートで作業しています。

138 :デフォルトの名無しさん:2007/02/02(金) 00:21:04
>>136
サンクス。職場では恥かかんよう気をつけるよー。

>>137
Option Explicit
Option Base 1

Sub testTwo()
Dim rng As Range
Dim outRng As Range
Dim data() As Variant
Dim cnt As Long
Dim outCnt As Long
Set rng = ActiveSheet.Range("B1")
cnt = 1
Do While rng.Row <= 10
If rng.Value = "0:00" Then
ReDim Preserve data(cnt)
data(cnt) = rng.Offset(0, -1).Value
cnt = cnt + 1
End If
Set rng = rng.Offset(1)
Loop
Set outRng = ActiveWorkbook.Worksheets("潮位").Range("D1")
For outCnt = 1 To cnt - 1
outRng.Value = data(outCnt)
Set outRng = outRng.Offset(1)
Next
End Sub

とりあえずD列に出してみた。
別シートに出力の際は潮位のところをそのシート名に変更すればよし、あとそのとなりをA1にするとA列にでる。

139 :デフォルトの名無しさん:2007/02/02(金) 00:25:16
ごめん。

Do While rng.Row <= 10

Do While rng.Row <= 65500
あたりに変えといて。
ちなみに検索する行の最大数。

あと、なにも出力されないようなら、
if rng Value = "0:00" Then

0:00 の部分をセルに表示されてる値ではなくて、
その右上らへんにある本当の値に変えてみて。

140 :デフォルトの名無しさん:2007/02/02(金) 00:29:36
っていうか、
VBAの勉強中だからついVBAで答えてしまったけれども・・・。

セルB1をクリック(選択)
データ→フィルタ→オートフィルタ
B1に三角がでるのでクリック
0:00を選択

orz...

141 :デフォルトの名無しさん:2007/02/02(金) 00:37:36
>>140
ありがとうございます。
オートフィルにすると、行が詰まってしまうので、
行間は白紙のまま置いておきたいのですよ。

>0:00 の部分をセルに表示されてる値ではなくて、
その右上らへんにある本当の値に変えてみて。
VBAでは出力されないのですが、もう少し教えてもらえますか。

142 :デフォルトの名無しさん:2007/02/02(金) 00:39:30
ここで無限ループ使った回答したら、素人にはブラクラ並の攻撃かもしれない

と、ふと思った

143 :デフォルトの名無しさん:2007/02/02(金) 00:47:28
こっちのほうが安全じゃない?
my_Row= Range("a65536").End(xlUp).Row
for i = 1 to my_row
処理
next i

144 :デフォルトの名無しさん:2007/02/02(金) 00:48:48
そのままなら、こっちか。
my_Row= Range("a65536").End(xlUp).Row
Do While rng.Row <= my_row

145 :デフォルトの名無しさん:2007/02/02(金) 00:52:51
>>141
Option Explicit
Option Base 1

Sub testTwo()
'変数定義
Dim row As Long
row = 1
'正午のデータだけ取得
Do While row < 65500
If row Mod 24 <> 1 Then
ActiveSheet.Range(Cells(row, 1), Cells(row, 2)).ClearContents
End If
row = row + 1
Loop
End Sub

正午以外を消して空白を残す。
24行ごとに値があること前提だけども…。

手抜きでスマソ、そろそろ寝ようかと…。

146 :デフォルトの名無しさん:2007/02/02(金) 00:59:56
>141
追記。
一瞬止まるけども、処理が遅いだけなので。
>>143)方式で、
Do While row < 65500

Dim myRow as Long
myRow = Range("a65536").End(xlUp).Row
Do While row < myRow

にすると早くなりまする。

>>143
>>145
まったくその通りですな。
まだまだ良いやり方のテンプレみたいなのがぱっと浮かんでこないのよなぁ…。

>142
自分のテストでは無限ループしたいほうだいだけどね。


すみません放置します。
おやすみなさい。

147 :デフォルトの名無しさん:2007/02/02(金) 01:03:55
どうもでした。ペコリ。

148 :デフォルトの名無しさん:2007/02/02(金) 01:08:35
成功しました。重ねてペコリ。
これで寝れそうです。

149 :125-126:2007/02/02(金) 07:20:11
>>129-130
レスどうもです。
出ているエラーの件は、たまにしかエラーが出ないので
エラーの内容を良く覚えてないのですが
「サポートされてない」みたいなエラーだったと思います。

do until構文を使う前にもsleepしてみて
エラーが出るかどうか、しばらく様子を見てみます。

150 :デフォルトの名無しさん:2007/02/03(土) 01:28:07
ちょっと暇だったのでVisualBasicのヘルプ全部印刷してみた(両面)

ヘルプ最高だな
高い金出してリファレンス買うぐらいならヘルプ印刷しといたほうが幸せだと気付いた
つうか手元のリファレンス見たらヘルプ丸写しがあって萎えた

151 :デフォルトの名無しさん:2007/02/03(土) 22:06:07
そうか〜?
現実問題、リファレンスで一番重要なのは索引なのだけども
オブジェクト名やメソッド名とかは印刷したものをアルファベット順に並べればいいとしても・・・
その他は・・・

152 :デフォルトの名無しさん:2007/02/03(土) 23:11:21
すみません。Vista/Excel2007で
Application.Speech.Speak "日本語"
をやると、英語なら何の設定もせずに読み上げるんですが、
日本語は読み上げません。
2003では設定すれば「ツール」→「音声」→「[読み上げ]ツールバー」ででたツールバーも
表示させる方法もわからないのですが、
どなたか、お教えいだけないでしょうか。

153 :デフォルトの名無しさん:2007/02/04(日) 00:19:46
新しいものにすぐ飛びつく早漏の癖に
情報的な基盤の無いものを自力で使いこなしていく
スキルも無い奴ってのは一番厄介だな

初心者ならシェアが広がるまで我慢汁垂らしながら待ってろよ

154 :デフォルトの名無しさん:2007/02/04(日) 00:21:56
>>150
両面印刷コストが20円として、100ページで2000円になる。
1000ページなら2万だし買った方が安くないか?

155 :デフォルトの名無しさん:2007/02/04(日) 01:22:42
コンピュータを用いた授業をしようと思うんですが、
VBAを用いて中学校数学の何か面白い教材を作ることできないかな??


156 :デフォルトの名無しさん:2007/02/04(日) 01:31:07
>>155
あるセルに好きな数字を入れると別なセルに数字が自動的に表示されて
その計算方法を推理させるとか。
もちろん数字を変えていくことで推理可能な計算式を考えんといかんよ。
数字じゃなくて論理式でも面白い、ある言葉を入れると別な言葉に置き換えられるとか。
あなたのVBA習熟度がどのくらいか知らないけど。

157 :デフォルトの名無しさん:2007/02/04(日) 01:31:45
>>155
「面白い教材」を考えるのは教員の仕事。
お前が思いつけないなら、お前はその程度の教師ってことだ。

考えついた「面白い教材」の実現方法なら手助けしないこともないが
何が悲しくて教員でもないのにガキの嗜好に頭捻らにゃならんのだ?

158 :156:2007/02/04(日) 01:34:02
>>157
正直スマンかった・・・

159 :デフォルトの名無しさん:2007/02/04(日) 01:46:55
いや、そういう返答は無視でw

160 :156:2007/02/04(日) 01:55:35
いや、>>157は言い方はあれだけど正論
写真屋スレで「キャラ絵描くんだけどどんなキャラがいい?」って聞く奴はおかしいのと同じ



161 :デフォルトの名無しさん:2007/02/04(日) 02:13:03
言ってしまえば
> 「面白い教材」の実現方法
だって教師の仕事なのに、それなら手助けしてやるって
言ってる時点で十二分に親切だな。

162 :デフォルトの名無しさん:2007/02/04(日) 02:16:26
Excel2007ってVBAの基本的言語仕様は変わってないんでしょうか?

例えばVB6.0のIntegerが16Bitなのが
VS2005のVBだとIntegerが32Bitになってるみたいな

163 :155:2007/02/04(日) 02:45:37
私は数学教師ですが、VBAは全くといっていいほどの初心者です。
データから平均を出したり、総合得点を出して表示させるぐらいしか
できません。
実現方法よりもどういったことができるかがよくわかっていないのです。
VBAにかなり詳しい方々が集まっているようなので、ご意見を参考に
させていただきたかったのですが、予習をしてから出直してきます。
すいませんでした。







164 :デフォルトの名無しさん:2007/02/04(日) 03:08:23
>>163
藻前は本当に教師なのか?
数学の分からない厨房は数学をイメージできない
数値なんて表示させても糞の意味もない
パソコンで学習させるなら、イメージを表示させてやる方がいい
つまり、関数グラフとか図形を使いこなして表示させろってこった

165 :デフォルトの名無しさん:2007/02/04(日) 03:12:32
>>164

166 :デフォルトの名無しさん:2007/02/04(日) 04:52:17
>>163
エクセルVBAで色々できるよ。外部アプリケーション、例えばインターネットエクスプローラーの制御も出来るよ。
工夫すれば、それなりにエクセルVBAでゲームを作ることもできて
エクセルVBAで作られたゲームのサンプルプログラム集とかも発売されてるよ。

167 :デフォルトの名無しさん:2007/02/04(日) 04:59:10
つうかさ、パソコン関係って何が出来るかって聞いていたら全然先に進めんぞ
自分は何がしたいって目的が最初であって、それを実現するにはVBAを選択するとか
他のモノを選択するとかすべき

168 :デフォルトの名無しさん:2007/02/04(日) 11:04:19
パソコンクラブでも作ってマニアな中学生に教えてもらえ
学習曲線は残念だけど物好きな中学生には勝てん
先生側は「教育の技術」で中学生と勝負しろよ

ExcelVBAは開発環境と実行環境の距離が近くていい材料だと思うけどね

169 :デフォルトの名無しさん:2007/02/04(日) 11:47:54
>>163
子供が見て分かりやすいのは物理シミュレーション
やはり目で見て動くと分かりやすい。
普通に教科書レベルの加速度とか落下だけでも結構面白い物が作れる

ExcelでもShapeやUserFromの座標を指定できるわけで

日本のApple本社に学校の旅行で行った時に、
なんてソフトか忘れたけどBasic風の記述言語で

「初期値を設定してボール(カエルだったかも)をジャンプさせて、落ちてきたて跳ねる」

ってプログラムが課題だった
ついでに速度や高さも表示する

設定値を間違えると果てまで飛んで行ったりして面白かったが。

数学なら幾何系とか確率系とかも分かりやすいかも

170 :デフォルトの名無しさん:2007/02/04(日) 11:50:05
計算問題を自動で作って答えあわせをするコードとか
100マス計算とかできるんじゃない?
でもそういうなのはネットを探せばいくらでも出てくるような気がする。

171 :デフォルトの名無しさん:2007/02/04(日) 12:30:10
>>170
数学を図式化して理解しやすくするのは良いが

それは駄目だろ、餓鬼に頃は紙に文字を書いて計算しないと馬鹿になるぞ

172 :デフォルトの名無しさん:2007/02/04(日) 12:31:00
>>170

173 :デフォルトの名無しさん:2007/02/04(日) 14:19:00
あるExcelファイルを日付が変わったら自動起動させるようにするには、
どんな感じで実現したらよいのでしょうか・・?

日の定型処理をしているのですが、
忘れてしまう事が多々あるので自動化したいです。

174 :デフォルトの名無しさん:2007/02/04(日) 14:53:15
>>173
そんな曖昧な条件でどうしろと?
「あるExcelファイルを日付が変わったら自動起動」という条件だけなら
OnTimeで0:00にブックを開くプロシージャを呼ぶだけだが、実際にはOnTimeが使える
状況では無いだろうし、ブックを開くのも「日付が変わったら=0:00」では困るのでは?

条件はエスパー以外の第三者にも伝わるように、日本語できちんと書こう。

175 :デフォルトの名無しさん:2007/02/04(日) 15:00:57
多分タスクでOK。つまり、VBA云々ではなくWindowsの使い方の問題。

176 :デフォルトの名無しさん:2007/02/04(日) 16:00:52
excel4.0専用のスレが見当たらないのでここで失礼します。
excel4.0のマクロって最近のexcelでも当時と同じように記述できるの?
なくなったマクロ関数や文法の変更なんかはないのかな?

たとえば『=select(シート名!R[1]C[1])』と記述して実行すると、
目的のシートのアクティブセルではなくマクロシートのselect関数が
記述してあるセルから1行下で1列右のセルを選択してしまう。
これはexcel側の仕様変更によるものじゃないよね?
もし記述の間違いによるものだったら正しい書き方を教えて。

177 :173:2007/02/04(日) 19:26:01
>>174
すいません。今週末から勉強を始めたので理解が足りないかもしれません。
Webクエリを用いてあるHPの表データを取得し統計処理をしています。
統計処理はそのExcelファイルを起動すれば実行できるよう実装済。

そのHPの表データは00:10頃に日々更新されているので毎日実行したいです。
そこでこの時間がきたら自動的にExcelファイルを起動する方法は、
どうやるのかなと質問してみました。
よくウイルス等で特定の時間が来たら挙動するようなものもあるし、
出来ない事はないなだろうと。

実行条件は時間以外にも色々ありますがFlagや分岐をつけたりすれば、
何とかできるだろうという事で今回は質問しませんでした。

Googleで「VBA 自動起動」等と検索しても条件が悪いらしく、
上手く引っかからないのでキーワードだけでももらえればと思いました。
これ以上は上手く説明できません。ごめんなさい。

>>175
あっありがとうございます。
VBAではなくそんな方法だったんですね。
書き込み後の検索中にAccessで似たような質問にヒットした時、
APIでスケジュラーに・・なんて記述があったので、
関係あるのかと思っちゃいました。

178 :デフォルトの名無しさん:2007/02/04(日) 21:35:03
>>177
スタートボタンから、ヘルプとサポートをクリック、テキストボックスに at っていれてみ。
出てくるから
スレ違いな話になってしまうんでこれでやめるけど。

179 :デフォルトの名無しさん:2007/02/04(日) 22:14:27
誰か教えてください。
仕事で ある一定の条件を満たすレコードを足していくプログラムをかいたのですが、数字がおかしくなります。
例えば、足す数字が15.1 80.6 30.4となると出た数字が126.100015239みたいな数字になります。
これはなんでなんでしょうか?

180 :デフォルトの名無しさん:2007/02/04(日) 22:43:27
小数点の演算というのは、CPUの仕組み上誤差が出るものなのだ。

仕組みや理由についてはは、「浮動小数点 誤差」とかでググるとそれっぽい解説のされてるとこがでるのでそこで確認してください。


Excelのシート上で、その見た目をどうにかしたければ、セル書式の設定で小数桁数1桁だかなんだかにすればよいです。

181 :デフォルトの名無しさん:2007/02/04(日) 23:35:39
浮動小数点演算をIF文なんかで条件処理する場合
=つかっちゃ駄目なんだよなぁ

182 :デフォルトの名無しさん:2007/02/05(月) 01:29:53
基本的に割り算もだめですね


183 :デフォルトの名無しさん:2007/02/05(月) 08:09:20
整数値の割り算の場合は/でなく
¥(商) Mod(余り)を使えばなんとかなる

184 :デフォルトの名無しさん:2007/02/05(月) 10:48:46
いま正規表現の検索フォームを作ってます
検索対象をusedrangeで取得してfor eachでまわしてます。
これで動作は問題ないのですが、対象が多いと時間がかかってしまいます。

そこで、rng=usedrangeと配列に代入して高速化しようとして問題にぶちあたりました。

配列に代入されるのがValueっぽいので、
セルに10:00の様に時間や日付が入っている場合
longになるので検索文字が10などと一致しません。

usedrang.textとして代入すると空になってしまいます。
配列に代入された文字の表示形式を調べて変換することも考えたのですが、
現状と大差ない感じがします。

シート上に表示されている値をまとめて配列に代入する方法か代替案がありましたら
ご教授おねがいします。


185 :デフォルトの名無しさん:2007/02/05(月) 10:53:50
クエリー

186 :デフォルトの名無しさん:2007/02/05(月) 11:05:11
txt→CSV変換でなにか、いいサンプルコードないですか?

入力ファイル:oder.txt
出力ファイル:任意.csv
csvに出力する時、元のtxtから不要データの排除と任意条件での集計

VBAかVBSで出来そうと思いいろいろ本読んで見たけど
いかんせんCobolerなので、よくわかっとりません

187 :デフォルトの名無しさん:2007/02/05(月) 11:09:25
元のテキストファイルのフォーマットはどのようなものですか?
固定長?

188 :デフォルトの名無しさん:2007/02/05(月) 11:36:51
Public Sub TextToCSV(ByVal pInPath As String, ByVal pOutPath As String)
Const C_DELIM As String = "," '区切り文字
Dim s As String:Dim s2 As String:Dim ss() As String
Dim fnoIn As Long: Dim fnoOut As Long

'ファイル開く
fnoIn = FreeFile: Open pInPath For Input As #fnoIn
fnoOut = FreeFile: Open pOutPath For Output As #fnoOut

'ファイル終了まで繰り返し
Do While (EOF(fnoIn))
'1行読み出し
Line Input #fnoIn, s
'特定のバイト位置に区切り文字を入れた文字列を作成する。
'イメージ000001111122222⇒00000,11111,22222
s2 = Mid(s, 1, 5) & "," & Mid(s, 6, 5) & "," & Mid(s, 11, 5)
'区切り文字が入った文字列をSplitで配列に出力
ss = Split(s2)
'各要素のチェックをする
If ss(0) = "99999" Then GoTo LOOP_NEXT
'ここまで来たら大丈夫のようなのでカンマ入り文字列(s2)CSVに出力する
Print #fnoOut, s2
LOOP_NEXT:
Loop
Close #fnoIn: Close #fnoOut
End Sub


189 :デフォルトの名無しさん:2007/02/05(月) 11:37:36
あータブとか消されてしまうのか。見づらいな。

190 :186:2007/02/05(月) 15:09:56
>>187
固定で102byteです。
得意先がいい加減で、仕様も手探り状態なもので(泣

>>188
ありがとうございます。
このコードを参考にして、試行錯誤してみます。



191 :デフォルトの名無しさん:2007/02/05(月) 17:01:11
>>190
得意先に仕様書無いと作れないと言えばいいじゃん。

192 :186:2007/02/05(月) 18:04:31
>>191
言ったよ゚・(つД`)・゚・
普段もらっている受注データとは別のもので。。。
特殊なパターンで、これしか渡せないと言われた。
txtデータと口頭で言われた項目(どこまでが**で**byteで、とか)だけ。
結局、自分たちで解析するしかなくて。。。
ホストのマスターに落とす必要ないのでVBSかAccessの類で出来ないか
考えてたんです。

ちなみに得意先はホ●ダ技研鈴鹿工場です
バイクも車もホ●ダだが、こういう体質は好かん!

193 :デフォルトの名無しさん:2007/02/05(月) 18:10:10
大丈夫、他も似たようなもんだ。

194 :デフォルトの名無しさん:2007/02/05(月) 20:11:48
>>180>>181>>182>>183
激しく感謝です。やっぱだめなんですね・・・^^;

195 :デフォルトの名無しさん:2007/02/05(月) 21:04:29
>>194
つか<、>で範囲チェックすりゃいいじゃん

196 :デフォルトの名無しさん:2007/02/05(月) 21:09:03
>>195
それはやっちゃダメ
結果的に同じでもコード的に意味が違ってしまう
つまり可読性を損なう

197 :デフォルトの名無しさん:2007/02/05(月) 21:18:55
>>196
どうしても出来ないときは
いいじゃんコメント書いとけばいいんだから

全部そんなプログラム組んじゃいけないけど


198 :デフォルトの名無しさん:2007/02/05(月) 21:20:09
後は10とか100でかけて整数値にするかだな

199 :184:2007/02/05(月) 21:59:21
>>185
俺にたいするレスと受け取っていいんですよね?

色々検索して
ttp://www.microsoft.com/japan/technet/scriptcenter/resources/officetips/jun05/tips0607.mspx
を参考にしてテストしてみたんですが、
やっぱり時間とかはきちんと取得できないんですけど、
(セルに10:00といれておくと0.5になる)
これじゃないんでしょうか?

申し訳ないんですが、検索キーワードなど教えていただけると
助かります。

いや、助けてください

200 :デフォルトの名無しさん:2007/02/05(月) 22:41:49
Dim tm As Date
Dim buf As String
tm = Cells(0, 0)
buf = Format(tm, hh:mm")

これで普通の文字列になるがな


201 :デフォルトの名無しさん:2007/02/05(月) 22:42:29
buf = Format(tm," hh:mm")


202 :デフォルトの名無しさん:2007/02/05(月) 22:45:10
更にtmだけでも応用すりゃ検索もできる

203 :デフォルトの名無しさん:2007/02/05(月) 23:08:56
>>200-202
おまえ、バカだろ。文字列にする方法なんてこの際問題じゃない。そんなの簡単に解る。
君のやり方で文字列化するなら、その前にその値が元々どういう表示形式で表示されていたか判断しなきゃならないんだよ。

そして>>184
> 配列に代入された文字の表示形式を調べて変換することも考えたのですが、
とあるから、君の考えた方法は既に変わりきってる上で、表示形式をいちいち調べて文字列に変換してたら
ValueではなくTextプロパティをループで読むのと大差ないってこった。

204 :デフォルトの名無しさん:2007/02/05(月) 23:14:58
>>203
いや
>>10:00といれておくと0.5
と言う単なるヒントだ、そのまま使ったら馬鹿だが

205 :デフォルトの名無しさん:2007/02/06(火) 00:15:27
10:00といれておくと0.5になるなら
逆に検索値を時間の場合10:00なら0.5にすりゃいんじゃねぇ?

206 :デフォルトの名無しさん:2007/02/06(火) 00:35:33
それだと時間じゃない0.5もヒットするわけで

207 :デフォルトの名無しさん:2007/02/06(火) 01:07:40
データベース使っても結局Value値がセットされると・・・
0.5でヒットしたらセル見にいって属性しらべたら?
少しはマシかも、0.5とかいっぱいあったら終わりだけど

208 :デフォルトの名無しさん:2007/02/06(火) 01:23:47
Findじゃ遅いの?

209 :デフォルトの名無しさん:2007/02/06(火) 01:27:24
findじゃだめなんだよ

210 :デフォルトの名無しさん:2007/02/06(火) 01:32:58
あとはクエリ使って、ここで答えでないんなら
データベース関係のスレで聞いてみたら?

211 :184:2007/02/06(火) 01:35:12
色々なレスありがとうございます。
最初の書き込みが携帯からで、内容をはしょりすぎて誤解があるようなので再度書き込みます。

A列)日付 B列)曜日 C列)作業名 D列)開始時刻 E列)終了時刻 F列)処理時間 G列)備考
が入っている複数のシートから正規表現で検索をしたいと思っています。

今の簡単なコードを書くと

Set reg = CreateObject("VBScript.RegExp")
With reg
.Pattern = strPattern
.IgnoreCase = True
.Global = True
end with
For Each sh in Thisworkbook.Sheets
For Each rng in sh.UsedRange
If reg.test(rng.Text) Then
検索文字列が見つかったときの処理
Debug.? "[address]" & rng.Address & " [text]" & rng.Text & " [Formula]" & rng.Formula
End If
Next
Next

といった流れなのですが、検索対象が大量にあり処理に時間がかかってしまいます。(対象30万件で5分くらい)
そこでFor Each rng in sh.UsedRangeをやめて、rng = sh.UsedRangeのように
配列にして、検索しようとしたところ、日付や時間(表示形式は[h]:mm)がLong型になるため
srtPattern = "10" などに10:00などが該当しなくなります。
rng = sh.UsedRange.Formulaは代入がうまくいくのですが、rng = sh.UsedRange.Textはできないようです。

列ごとに時間や日付が入っているなら、そこだけ変換すりゃいーだろ、と言われそうですが
列がずれた場合や新たに項目が増えた場合を考えて、決め打ちで変換するのは出来れば避けたいと考えています。
説明下手ですいませんが、高速に処理する方法がありましたらご教授お願いします。

212 :デフォルトの名無しさん:2007/02/06(火) 01:39:00
件数多いなぁ、確実にデータベース使った方が良いと思うよ
漏れはやり方わからんが

213 :デフォルトの名無しさん:2007/02/06(火) 01:42:57
>>列がずれた場合や新たに項目が増えた場合を考えて
列のセルに名前付けりゃいいんじゃないの?

214 :デフォルトの名無しさん:2007/02/06(火) 01:56:50
> 列がずれた場合や新たに項目が増えた場合を考えて、
2行目(実データの1行目)の表示形式に合わせるって手もある
30万回表示形式取得したら相当遅くなるだろうが、列数分(現状7回)だけなら殆ど気にならないだろ

215 :たのんます:2007/02/06(火) 02:00:54
エクセルに関する質問なんですが
統計数字データをグラフに変換して、統計データによるグラフを作成する際に
統計データの始点と終点を同じにして、重ねて比べられるようなグラフにしたいのですが
統計データの量が、比較したいAとBでは異なるため、
始点終点を同じにして、重ねて比べることができません。
何か関数とかその他の方法で、
違うデータ量のものを重ねて比較する方法はないでしょうか?

216 :184:2007/02/06(火) 02:08:44
書き忘れましたが、正規表現を使いたい理由は作業名が入力者により、まちまちなのでまとめて検索したいからです。
誤)日付はDate型ですね。すいません。
  0.5は12:00でした。すいません。

いま>>199のリンク先のコードを改良してテストしてみたら、
10:00とかはちゃんと取れますね(表示10:00→取得値10:00:00でした)
ただ24時間を越えるとダメみたいです(表示28:00→取得値1900/01/01 4:00:00でした)
日付も表示が1月1日でも2007/01/01でした。
何か指定する方法があるのかもしれませんが…

>>208
Findって正規表現使えましたっけ?調べてみます

>>210
なにぶんADOとか初めてなんでもう少し
ttp://support.microsoft.com/?kbid=257819
とかを見て勉強してみます。

>>212
俺もそう思います

>>213
名前を定義なども考えましたが、名前=範囲な訳で新規に項目が増えた場合にはコードを追加し
範囲別にコードを書かなければいけないので、試してません。
条件分岐で範囲(名前)別にコードを書く必要もないかもしれませんが、
ただでさえ件数が多く時間がかかるので、極力条件分岐などの処理をいれたくないので。

>>214
それは考えつきませんでした。試して見たいと思います。

色々ありがとうございました。自分でも試行錯誤してみようと思います。

217 :デフォルトの名無しさん:2007/02/06(火) 02:16:11
>>216

Date型 は日付と時間一緒ですよ(小数点以下が時間)

>名前を定義
範囲で名前付けるんじゃなく、1行目の1セルに名前付けて
呼び出せば行位置と列位置が分かる 列位置分かればなんの行か分かるでしょ


218 :デフォルトの名無しさん:2007/02/06(火) 02:19:39
>>217

>名前を定義
と書いていて複数シートじゃ駄目だね・・・

219 :デフォルトの名無しさん:2007/02/06(火) 02:20:11
>>215
あるけどマルチしたので教えません

220 :たのんます:2007/02/06(火) 02:49:33
すいません マルチの意味がわかりました、、、
してはいけないことと知りませんでした。
ただものすごく困っています。
色々調べても方法がなくて、、、
ご存知でしたら、何卒お教えいただけませんでしょうか?
以後こんな事をしてしまわないように気をつけます。

221 :デフォルトの名無しさん:2007/02/06(火) 02:59:27
今回のが教訓だ。ここで教えちゃったら教訓にならない。
「マルチしても謝れば教えてもらえる」程度に思っちゃうだろう。

今回マルチをしてしまった責は、今回答えてもらえないということで負い
以後気を付けることで、以後の質問では突き放されることはなくなる。

まぁマルチをしても、2chで仮初めの礼を言われることくらいしか楽しみのない
哀れな教えたがり君が答えてくれることもあるけどね。

222 :デフォルトの名無しさん:2007/02/06(火) 13:58:34
VBAでTerminateメソッドって使えないんでしょうか?
VBAから起動しているアプリを終了したいんですが

Set WshShell = CreateObject("WScript.Shell")
WshShell.Terminate ("ファイルパス")
と打ち込んでもエラーになっていまいます。

Set WshShell = CreateObject("WScript.Shell")
WshShell.exec ("ファイルパス")
で起動はできるようですが。

VBAを使って、windows上で起動しているアプリを終了させるには
どうしたらいいんでしょうか?

223 :デフォルトの名無しさん:2007/02/06(火) 14:25:54
>>222
Win32API使うかWMI使うかだな
つーか全然VBAの質問じゃないし

224 :222:2007/02/06(火) 14:34:30
え、これVBAの質問じゃないんですか?
すいません。
これはAPIのスレに行けばいいんですかね?

225 :デフォルトの名無しさん:2007/02/06(火) 15:09:04
VB言語でApplicationオブジェクト(ExcelやWord)を操作するからVisual Basic for Application、略してVBA。
Applicationオブジェクト(Excelではブック、シート、セルなどを含む)を操作しなかったら
例えExcelやWord付属のVBEで実行しようと、VBAの分野の話じゃ無い。

開発環境の方のVisual Basicでやるべき事を、ExcelやWord付属のVBEに持ってきてるだけだ。
VBAはあくまでもマクロ言語なのに、開発環境に匹敵するほど強力過ぎる故にその辺の区別が出来ない奴が多くて困る。
「VBAで」の部分を「VB6.0で」に置換しても通用しちゃうような話は、全部開発環境分野の話だと思ってくれ。

因みに君のレベルならWin32APIよりはWMIの方がいいと思うぞ。
でもどっちにしろスレで質問することばかり考えてないで自分で調べることを考えよう。
どうせWin32APIスレでは言語限定での丸投げ(コード書いてクレクレ)なんて聞いちゃくれないし。

226 :デフォルトの名無しさん:2007/02/07(水) 10:38:35
ADOを使用してエクセルのシートをデータベースにセットする場合
各セル毎のデータ形式でなく、全て文字列形式にしてセットする方法があるんでしょうか?
(セルを全て文字列形式にするという方法は除いて)
もしあるのなら、教えてください。

227 :デフォルトの名無しさん:2007/02/07(水) 14:47:01
>>221
何をエラそうに講釈たれてんだよ、バーカ。何も教えないくせに態度ばっかしデカいんだよ。

228 :デフォルトの名無しさん:2007/02/07(水) 14:56:05
( ゚д゚)ポカーン

229 :デフォルトの名無しさん:2007/02/08(木) 00:50:04
マルチがなぜダメなのかを知っていればあんなに高飛車に
偉そうなことは言わないというのは間違いのない話であるよな。

230 :デフォルトの名無しさん:2007/02/08(木) 01:01:14
つうか

>>226
の質問はスルーか

231 :デフォルトの名無しさん:2007/02/08(木) 03:03:30
if

Do While
 *********
Loop

end if

こんな感じのプログラムのDoLoopを1秒たったら繰り返すような感じに出来ますか?

232 :デフォルトの名無しさん:2007/02/08(木) 03:36:24
>>231
Application.WaitなりWin32APIのSleepなりお好きなように

233 :デフォルトの名無しさん:2007/02/08(木) 17:02:10
>>232

234 :デフォルトの名無しさん:2007/02/08(木) 20:05:16


const aretsul = 1

DATA = "データファイル" Cells(row, aretsul).Text
Cellsに「222123,」見たいな感じにデータが入ってるんですが、最後のコンマを消したいんです
最後の一文字を読み込まないようにするにはどうすればいいでしょうか?

235 :デフォルトの名無しさん:2007/02/08(木) 20:31:13
> 最後の一文字を読み込まないようにする
Value値にも因るが、基本的に不可能。

読み込んだ後で、末尾の1文字を消すなら文字列操作関数でどうにでもなるけどね。

236 :デフォルトの名無しさん:2007/02/08(木) 21:21:27
>>234
left(cells(セルA,セルB), len(cells(セルA,セルB)) - 1)

こんなんどう?(未テスト。やりたいことは伝わるかと)

っていうか上の2行は?

237 :デフォルトの名無しさん:2007/02/08(木) 21:40:45
>>235 >>236

238 :デフォルトの名無しさん:2007/02/08(木) 21:58:30
ごめん、ビジネスsoft板のExcel総合スレで聞いたんだけど、こっちの方がよさげなので、
すみませんがマルチさせていただきます。
以下、コピペですが、エラーを防ぐ原因と方法を知ってる方いたら教えてください。

すみません、VBAのことで質問です。
リンク先のプログラムで、コマンドボタンを押した後に表示されるフォーム(モーダレス)の
コマンドボタンを押して処理を実行中にシートをダブルクリックしたりすとエラーで落ちちゃう
んですが、これを防ぐにはフォームをモーダルでshowするしかないですかね?

http://555.sytes.net/up/img/375.zip

239 :デフォルトの名無しさん:2007/02/08(木) 22:35:29
>>238
原因不明なのですが、試してみてくれませんでしょうか?

ループの前に
Application.ScreenUpdating = false
ループの後に
Application.ScreenUpdating = true

スペルミスあったらごめんなさい。

240 :238:2007/02/08(木) 22:46:43
>>239
ありがとうございますm(_ _)m

教えていただいた通りにしたらエラーがでなくなりました。

Application.ScreenUpdating = false で画面の更新を一時的に止めてやるんですね。

Formをmodalで表示しなくてもこの方法ならいけそうです!



241 :デフォルトの名無しさん:2007/02/09(金) 01:38:11
>>226


242 :デフォルトの名無しさん:2007/02/09(金) 01:45:38
>>241

243 :デフォルトの名無しさん:2007/02/12(月) 10:41:46
すみませんが質問です。
ユーザーフォームにテキストボックス若しくはラベルを作り、
そこに文字を電光掲示板のように文字をスクロールさせる事は可能ですか?

244 :デフォルトの名無しさん:2007/02/12(月) 10:49:33
タイマー作って文字列を更新しろ

245 :デフォルトの名無しさん:2007/02/12(月) 11:39:55
Alt + PrintScreenで、画面のハードコピーをとって、
エクセルシートに貼り付ける時に、
そのハードコピーの拡大率は100%ですよね。
これを80%の拡大率で貼り付けたい時はどうすればよいのでしょうか?
貼り付けた後に、拡大率を変更するのは面倒なので。
(エクセルシート自体は100%のままで)

246 :デフォルトの名無しさん:2007/02/12(月) 12:22:16
sub 貼りつけ
const ZOOM_RATE AS SINGLE = 0.8

ActiveSheet.Paste
Selection.ShapeRange.LockAspectRatio = msoTrue
Selection.ShapeRange.Height = Selection.ShapeRange.Height * ZOOM_RATE
Selection.ShapeRange.Width = Selection.ShapeRange.Width * ZOOM_RATE

end sub


どのプロパティ実現できるか分からないときは、マクロの記録を活用すると良いですよ。


247 :243:2007/02/12(月) 17:24:50
>>244
なめらかに文字を流したいのですが・・・

248 :デフォルトの名無しさん:2007/02/12(月) 17:27:26
>>247
ラベルの位置を微調整するとか、自前で文字描画するとか、まぁ頑張って。

249 :243:2007/02/12(月) 17:31:17
>>248
簡単にできる方法ってないんですね・・・
何とかがんばってみます!

250 :デフォルトの名無しさん:2007/02/12(月) 18:06:55
いや、簡単だろ

251 :デフォルトの名無しさん:2007/02/12(月) 18:12:42
質問です。
Office2007 Excelでマクロの記録機能で、テキストボックスを表示して、テキストボックス内に文字を表示するといったマクロを記録しましたが、テキストボックスに関するマクロが一切記録されません。
何か個別に設定が必要なのでしょうか?


252 :デフォルトの名無しさん:2007/02/13(火) 15:53:09
そのテキストボックス自分で実装したなら無理じゃね?

253 :デフォルトの名無しさん:2007/02/13(火) 19:25:13
質問があります。

たとえばA1:D50までの表がありその中に3桁の数値が入っているのですが、
そのなかに指定した1桁の数値(H1に入力した数値)が(3桁のいずれかに)含まれるセルに色をつけたいのです。
また、関係ないかもしれないですが、表には空欄がある場合があります。

どうしたらいいでしょか。
お力をお貸しください。


254 :デフォルトの名無しさん:2007/02/13(火) 20:07:08
>>253
条件付き書式でも出来るが、VBAでやりたいなら単にループ回してInStrあたりでその数字が含まれてるかどうか調べればいいだけじゃん。
第二第三引数は数値渡しても自動で文字列化されるし、戻り値をそのまま条件に出来る。

255 :デフォルトの名無しさん:2007/02/14(水) 15:53:03
教えてください!
VBAからマクロの記録を終了させたり開始させたりする事って
出来るのでしょうか?

Application.CommandBars("Stop Recording").Visible = True
strTempBuff = CommandBars("Stop Recording").Controls(1).Caption
If Not strTempBuff = "新しいマクロの記録(&R)..." Then
'記録中なら停止したい。
xlApp.Application.CommandBars("Stop Recording").Controls(1).Execute '同じErr
xlApp.Application.CommandBars("Stop Recording").Controls("記録終了(&R)").Execute '同じErr
End If

上記コードで実行すると、マクロ記録中の場合
オートメーションエラーが発生してしまいます。
既にマクロが走っているからでしょうか?



256 :デフォルトの名無しさん:2007/02/14(水) 23:16:03
すみませぬが質問です。フォームにラベルを作り、そのラベルにランダムの行数のセルを表示させ、
ちょっと時間をおいてその隣のセルを表示させる、というプログラムを作りましたが
上手いこといきません。アドバイス下さいませ。

Option Explicit
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
'メイン
Private Sub userform_initialize()
Call 表示
End Sub
'表示
Sub 表示()
'乱数発生
Randomize
Dim 行番号 As Long
Dim 乱数 As Long
行番号 = Worksheets("sheet1").Range("a65536").End(xlUp).Row
乱数 = Int(Rnd * 行番号) + 1
Label1.Caption = Cells(乱数, 1).Value
Sleep (1000)
Label1.Caption = Cells(乱数, 2).Value
End Sub

257 :デフォルトの名無しさん:2007/02/15(木) 00:01:44
>>256
なにが上手いこといかないのか良く分からないんですが、
きっとエラーになるのではなくて、いきなり表示がCells(乱数,2)の値に
なると仮定してレス

Private Sub userform_initialize()
はFormが表示されるまえに起こるイベントなんで、
表示されたときにはCells(乱数,2)が表示されてしまうと思います。

あとは、

Label1.Caption = Cells(乱数, 1).Value
'追加↓
DoEvents
Sleep (1000)
Label1.Caption = Cells(乱数, 2).Value

と、DoEventsを入れないと
Sub 表示()の処理がすべて終わるまで
表示が更新されないと思いますよ。

258 :デフォルトの名無しさん:2007/02/15(木) 00:30:37
アクティブセルに色付けするとき、どう指定するんでしょうか?
range("A1").interior.colorindex=36
などという例は見たのですが、特定のセルじゃなく、アクティブなセルとして指定する場合を教えてください。


259 :デフォルトの名無しさん:2007/02/15(木) 00:43:08
range("A1")の変わりにActiveCellって書けばいいだけじゃん。
何でそんなことも調べられないの?
「アクティブなセル」でヘルプ検索したらすぐ出てくるのに。

260 :デフォルトの名無しさん:2007/02/15(木) 00:50:17
カーソル移動したセルの色変えたいなら
イベントと組み合わせて使えばよい

261 :258:2007/02/15(木) 00:59:28
>>259
それも試しにやってみたのですが、色が変わらないので間違っているのかと。

ちなみにユーザー定義関数内でやろうとしていて以下のようにしてもoutputはでますが、
色が出ないんです。指定がおかしいのでしょうか?

Function color(work)

ActiveCell.Interior.ColorIndex = 36

color = "color" & work

End Function


262 :デフォルトの名無しさん:2007/02/15(木) 01:18:30
>>261
普通にできてしまったのですが…。

Function test()
ActiveCell.Interior.ColorIndex = 36
End Function

同じですよね、多分?

263 :デフォルトの名無しさん:2007/02/15(木) 01:25:42
>>262
たびたびすみません。同じだと思うのですが・・・。

やろうとしていることは、
・ユーザー定義関数を作ろうとしていて(ここでいうcolorという関数)
・計算結果がある値をとればセルの色を変える
というもので、上述のcolorという関数はそれをおもいっきり簡略化したものです。

やっぱり上手くいかないです・・・
もしかして根本的にわたしが勘違いしているのかもしれません。ユーザー定義関数とマクロは別物ということでしょうか?

264 :デフォルトの名無しさん:2007/02/15(木) 01:27:47
263補足

>>262さんのを登録後、エクセル上で=test()と任意のセルに入力しても
ゼロと表示されるだけで色は変わりませんでした・・・

265 :デフォルトの名無しさん:2007/02/15(木) 01:29:16
引数のworkには何が入る予定なの?

266 :デフォルトの名無しさん:2007/02/15(木) 01:30:49
あー、分かった。
セルでセル関数のようにはマクロのユーザー関数は使えないよ。
ツールメニュー→マクロ→color(自分で作ったユーザ関数)を選らんで、
その時点で使うわけ。

267 :デフォルトの名無しさん:2007/02/15(木) 01:30:54
>>265
ただの文字列です。

268 :デフォルトの名無しさん:2007/02/15(木) 01:34:30
「セルの計算結果」って言ってるのは、
=SUM(R[-3]C:R[-1]C) ←こういう奴の話を言ってるんだよね?
で、このイコールのところに自分で作った関数を入れたいってことよね?
結論から言えば、できないんじゃないかなあ。

269 :268:2007/02/15(木) 01:37:15
ごめん!
ウソ言ってた。
できたよ。


270 :デフォルトの名無しさん:2007/02/15(木) 01:37:24
>>261
> ユーザー定義関数内でやろうとしていて
先に書けよ。

ユーザー定義関数ってのは引数を計算して、式を入れたセルに値を返す物で
書式設定だのなんだのというシート上の操作を行うものじゃないぞ。
だからアクティブセルを取得することは出来るが操作は出来ない。それがユーザー定義関数ってものだ。
指定がおかしいんじゃなくて、やろうとしている事に対してユーザー定義関数を使おうとしているのがおかしい。
取得が出来てることはDebug.Print ActiveCell.Address(0, 0)を入れればわかるだろう。
操作がしたいならイベントを使え。

271 :デフォルトの名無しさん:2007/02/15(木) 01:38:10
http://www.relief.jp/itnote/archives/001873.php

272 :デフォルトの名無しさん:2007/02/15(木) 01:48:01
>>268
そういうやつですね。
文字列の長さからいろいろと計算させる予定でした。
結果的にダメっぽいですね。
いろいろとありがとうございました。

>>270
イベントでやるしかないのですね。
>それがユーザー定義関数ってものだ。
名言の匂いがしますね。使わせて頂きます。

>>271
参考になりました。


273 :デフォルトの名無しさん:2007/02/15(木) 01:48:02
265+266+268+269
あとはがんばって〜。寝るわ。

274 :デフォルトの名無しさん:2007/02/15(木) 03:47:04
Const a = 1
Const b = 2
Const c = 3
Sub main()
a1 = 1
b1 = 1
c1 = 1
cells_a = 0
cells_b = 0
cells_c = 0
Do While cells(a1, a).Text <> ""
a1 = a1 + 1
cells_a = cells_a + 1
Loop
Do While cells(b1, b).Text <> ""
b1 = b1 + 1
cells_b = cells_b + 1
Loop
Do While cells(c1, c).Text <> ""
c1 = c1 + 1
cells_c = cells_c + 1
Loop
cells(1, 5).Value = cells_a
cells(2, 5).Value = cells_b
cells(3, 5).Value = cells_c
End Sub

このプログラムを短くできませんか?

275 :デフォルトの名無しさん:2007/02/15(木) 04:39:47
配列使うと1/3近くには出来るかも知れないが
速度は落ちるんじゃないかな

276 :デフォルトの名無しさん:2007/02/15(木) 10:09:42
>>274
Const a = 1
Const b = 2
Const c = 3
Sub main()
a1 = 1:b1 = 1:c1 = 1

With Application.WorksheetFunction
cells(1, 5).Value = .Count(Range(Cells(a1,a),Cells(a1,a).End(xlDown)))
cells(2, 5).Value = .count(Range(Cells(b1,b),Cells(b1,b).End(xlDown)))
cells(3, 5).Value = .count(Range(Cells(c1,c),Cells(c1,c).End(xlDown)))
End With
End Sub

試してないけど、とかじゃダメなのか?



277 :256:2007/02/15(木) 10:51:13
>>257
お答えありがとうございます。説明不足ですみませんでした。
御推察のとおり、1つ目のセルは表示されずに2つ目が表示されてしまっていました。
で、>>257様の誤解を参考にして色々試したのですが、どうにもうまくいきません。
もう少しだけヒント頂けないでしょうか?

278 :sage:2007/02/15(木) 13:13:37
>>277
何を試してどうだめだったのか書かないと…

とりあえず自分の環境では普通に動く

フォームを表示したときに表示したければ
UserForm_Activaue()内で
Callしてみれば?

とりあえず、F8でステップインしながら
動きを確認してみることをお勧めするよ
後はDebug.Printするとか。

ローカルウィンドウで
変数に期待通りの値が
はいってるか確認する方法もあるし。

なんにしても情報が少なすぎだと思いますよ

279 :デフォルトの名無しさん:2007/02/15(木) 13:18:21
うはぁ
あげちった…

携帯からレスするもんじゃないな…

280 :デフォルトの名無しさん:2007/02/15(木) 14:18:22
他人事ながら

×UserForm_Activaue()
○UserForm_Activate()

横レス失礼

281 :256:2007/02/15(木) 16:06:37
>>278,>>280
またまた説明足らずで申し訳ありませんでした。
で、ご指摘の方法でちゃんと出来ました!
自分の持ってるVBAの本が初心者用のものだったため、
UserForm_Active()とか全然載ってなくて方法が分かりませんでした。
今回はどうもありがとうございました!


282 :デフォルトの名無しさん:2007/02/15(木) 16:27:59
VBに高階関数とかってないの?関数に関数を引数として渡したいだけなんだけど。

283 :デフォルトの名無しさん:2007/02/15(木) 16:49:21
>>282
AddressOf

284 :デフォルトの名無しさん:2007/02/15(木) 19:07:28
>>283
おお、サンクス

285 :デフォルトの名無しさん:2007/02/15(木) 19:31:06
ダイアログボックスで入力された年・月にしたがってカレンダーを表示するマクロを作っています。
年・月は文字列として取得、それを日付型にデータ変換して日付型の変数に代入しているのですが、
そこで「実行時エラー'11': 0で除算しました。」とのエラーが出ます。
DateValue関数を使う、日付型の変数を Variant型に変える、を試してみましたが、
結果は同じでした。
文字型の変数を Variant型に変えると、最初に1回エラーが出たあとその後は出なくなりましたが、
カレンダー表示の処理のところで日付を誤認してしまいます。
現在は On Error Resume Next でエラーを抑制して動かしており、
本来の目的であるカレンダー表示はそれで問題なくできておりますが、
可能であればエラー自体出ないようにしたいと思っています。
どこが悪いのかアドバイスをお願いします。

テストコード
Sub test()
Dim strInput As String
Dim datDay As Date
strInput = InputBox("年と月を入力してください。(例)「2007 2」")
datDay = CDate(strInput)
MsgBox datDay
End Sub

環境
Mac OS X 10.4.8
Excel 2004 for Mac ver. 11.3(060914)

以上よろしくお願いします。

286 :デフォルトの名無しさん:2007/02/15(木) 20:46:35
VBAのソースで右側に長くなって見づら苦なってきたのでソースの内容はそのままで改行することってできませんか?
普通に改行するとエラーが出てしまいます。

287 :デフォルトの名無しさん:2007/02/15(木) 21:01:35
MsgBox _
 "VBAのソースで右側に長くなって" & vbCrLf & _
 "見づら苦なってきたので" & vbCrLf & _
 "ソースの内容はそのままで" & vbCrLf & _
 "改行することってできませんか?" & vbCrLf & _
 vbCrLf & _
 "普通に改行するとエラーが出てしまいます。"

288 :デフォルトの名無しさん:2007/02/15(木) 21:30:38
>>287
Chr(10)じゃだめ?

289 :デフォルトの名無しさん:2007/02/15(木) 21:51:40
>>285
テストコードが問題なく実行できてしまったのですが…。
カレンダーに変換してるところのエラーでは?

290 :デフォルトの名無しさん:2007/02/15(木) 22:43:59
たぶんロケール絡みだろう。
同じバージョンのWindows&Excelだって、ロケールが違うとCDateやIsDateの動作が変わってくるからな。
とりあえずInputBoxとCDateの間に
If strInput = "" Then MsgBox "空文字 or キャンセル": Exit Sub
If Not IsDate(strInput) Then MsgBox "日付変換不可": Exit Sub
って入れてみな。「2007 2」で"日付変換不可"が出るようなら、ロケールの問題でビンゴだ。
その場合は文字列切り出しで年と月を取得しよう。
"日付変換不可"が出ないにしても、文字列切り出しで解決出来るならそれでいいし。

291 :286:2007/02/16(金) 00:53:59
_←これだけで改行できた思い出させてくれてありがとう

292 :デフォルトの名無しさん:2007/02/16(金) 01:11:48
ListBoxに値をいれるとClickやChangeが発生しますが、
クリック中に値を変更したい場合とかどうしてますか?

フラグもって立ってたら処理しないというやり方で回避してるんだけど
なにかほかにいい方法がありますでしょうかね。

293 :285:2007/02/16(金) 01:38:32
>>289, 290
レスをいただきありがとうございます。
テストコードのほうですが、>>290さんのコードを加えて実行してみたところ、
1回目は「実行が終了しました」とのエラーメッセージが表示され、
2回目は「オーバーフローしました」とのエラーメッセージが表示され、
3回目以降は「2007.2.1」と普通に表示されました。
念のため本来のマクロを On Error Resume Next をコメントアウトして再度実行してみたところ、
1回目は「オーバーフローしました」とのエラーメッセージが表示され、
2回目も「オーバーフローしました」とのエラーメッセージが表示され、
3回目は正常にマクロが実行され、
4回目で「0で除算しました」とのエラーメッセージが表示されました…
こちらに書き込む前に何回もテストし、そのときは「0で除算しました」というエラーメッセージのみ
繰り返し出ていたのですが、実行のタイミングによってまるで結果が違ってきているようでもあり、
とまどっています。
>>290さんのおっしゃっている「文字列切り出し」という方法は、文字列から年と月をそれぞれ別々に取得する
ということですね?
がんばってコードを書いて試してみます。
どうもありがとうございました。

294 :デフォルトの名無しさん:2007/02/16(金) 10:37:50
a = Int(9 * Rnd + 1)
b = Int(9 * Rnd + 1)
c = a + b

これでcの中にaの中に7 bの中に8 が入ってるとして 15じゃなく 78と表示することはできますか?

295 :デフォルトの名無しさん:2007/02/16(金) 11:59:19
>>294
つなげたいなら、&


296 :デフォルトの名無しさん:2007/02/16(金) 12:20:14
ちょwwVB以前の問題だろw
a*10+bも思いつかんのか

297 :デフォルトの名無しさん:2007/02/16(金) 22:23:14
初歩的な質問でホントにすいません;

エクセルのシート上にファイル等から画像を挿入したとします。

その画像を文字列の背面に持っていく方法がわかりません;

背景に設定する等とは違います;
(ちなみに背景も小さい画像で設定すると
ビッチリ並んで出てきますが、好きな場所に1個だけ、
とかは出来るんでしょうか?)

よろしくお願いします;

298 :デフォルトの名無しさん:2007/02/16(金) 22:25:14
すいません;スレ違いでした;

299 :デフォルトの名無しさん:2007/02/18(日) 12:04:32
100行まで三行間隔で文字列が入っていて間違って打ってないか確認したいです。

B列、100行までの間の3の倍数のセルに"もげ"って入っていたら次の3の倍数のセルへ
間違っているか、空欄だったらセルを選択した状態で終えてください。
という処理をしたいのですが
相対セルと三の倍数選択する部分の表現でつまづいてしまいました。

一つずつチェックしてこなすにも5000行以上で当て上げ状態です
どなたかヒントかVBAのソースを教えていただけないでしょうか
よろしくおねがいします


300 :デフォルトの名無しさん:2007/02/18(日) 12:13:16
当て上げ?
で、そのチェックはVBAでやるようなことなのか?

301 :デフォルトの名無しさん:2007/02/18(日) 12:54:44
B列を削除して割り振りなおした方が簡単じゃないの?

302 :デフォルトの名無しさん:2007/02/18(日) 12:55:01
> ソースを教えていただけないでしょうか
ソースが欲しいならそういうところに頼めよ
ここは丸投げ依頼所じゃないぜ
自分で書こうって気がある奴がヒントを貰いに来る場だ

303 :デフォルトの名無しさん:2007/02/18(日) 12:57:28
step 3 じゃだめ?

304 :デフォルトの名無しさん:2007/02/18(日) 13:19:21
>>299
100行まで?

Sub moge()
  Dim i As Integer
  For i = 3 To 100 Step 3
    If Cells(i, 2).Value = "" Then
      MsgBox "B" & i & "は空白ですよ。"
    ElseIf Cells(i, 2).Value <> "もげ" Then
      MsgBox "B" & i & "に「もげ」でない文字が入っています。"
    End If
  Next i
End Sub

305 :デフォルトの名無しさん:2007/02/18(日) 13:41:13
dim giy as integer

a=4937870
b=1.05
s=387
u=100

giy = WorksheetFunction.RoundDown(((a * b) / (s*u)), -1)


上のを実行するとなんでかオーバーフローするんですけど。

306 :デフォルトの名無しさん:2007/02/18(日) 13:47:01
しませんでしたけど…
念のためLongにしといたらどーですか?

307 :299:2007/02/18(日) 13:51:43
>>304
まさにこれです
変数とかCellsとかforとかすごい勉強なります。
ありがとうございます

>>303 
最初なんのことだろうと思いましたが、304みてわかりました。step 3。
ありがとうございます。


308 :デフォルトの名無しさん:2007/02/18(日) 13:56:43
デバッグしてa*bのところにマウスをもってくると、5184763.26454401
という数字が出ます。小数点以下の数字が原因かと思うんですけど。

309 :デフォルトの名無しさん:2007/02/18(日) 14:11:26
>>308
それのどこがオーバフロー?

310 :デフォルトの名無しさん:2007/02/18(日) 14:14:16
もしかして:
単精度で計算していて精度がでていないという落ち?

311 :デフォルトの名無しさん:2007/02/18(日) 14:25:55
aとbがVariantならdoubleと同じ精度で扱えると思うんだが…

312 :デフォルトの名無しさん:2007/02/18(日) 21:49:04
フォームのテキストボックスを全部いっぺんに空白にする方法はありますか?

313 :デフォルトの名無しさん:2007/02/18(日) 22:40:09
>>312
順番に空白にすればよい

314 :312:2007/02/18(日) 22:44:54
いや、そりゃもちろんそうなんですが、
一行で一気に全部いっぺんに空白にしてしまうような命令とかはないかなぁと思いまして・・・

315 :デフォルトの名無しさん:2007/02/18(日) 22:55:43
>>314
そんなことしてどーするの?
見た目には変わらないのに?

316 :デフォルトの名無しさん:2007/02/18(日) 23:10:11
Me.Controlsに対してFor Eachループ回して
If TypeName(objControl) = "TextBox" Then objControl.Text = ""
とか

317 :デフォルトの名無しさん:2007/02/18(日) 23:29:42
そういう処理をするプロシージャを用意しておいて、そいつを呼べばいい。

318 :312:2007/02/19(月) 10:43:01
>>315
自分の作成したフォームのテキストボックスが20個くらいありまして、
それをクリアするのにプログラムが長くなってしまうので
短く簡単にすませる方法はないかなぁと思いまして。
>>316、317
ありがとうございます。それで試してみます!

319 :デフォルトの名無しさん:2007/02/20(火) 00:41:14
EXCELで

コマンドボタンをクリックすると、Sheet3のA1:A10の内容を、Sheet1のA1:A10にコピーする

こんなモノを作りたいのですが


Private Sub CommandButton1_Click()
Range("A1:A10").Select
Selection.Copy
Sheets("Sheet1").Select
Range("A1:A10").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
End Sub

こうすると、「Range クラスの Select メソッドが失敗しました」となってしまいます
どうすればいいか教えて下さい

「マクロの記録」を使ってしか、マクロ扱った事無いのに
調子に乗って仕事請けてしまって困ってます・・・

320 :デフォルトの名無しさん:2007/02/20(火) 00:58:33
>>319
これだけでいいんでない?

Private Sub CommandButton1_Click()
  Worksheets("Sheet3").Range("A1:A10").Copy
  Worksheets("Sheet1").Range("A1:A10").PasteSpecial Paste:=xlPasteValues
End Sub

最後に
Worksheets("Sheet1").Activate
にしてもいいと思うけど…

321 :319:2007/02/20(火) 01:15:25
解決しました有難うございます

範囲指定の時は

Worksheets("Sheet3").Range("A1:A10")

としなければいけないのですね


322 :デフォルトの名無しさん:2007/02/20(火) 01:18:36
>>321
シート名を指定していないのでSelectが失敗したのではないでしょうか?
範囲指定とは関係ないです。
そういや
Worksheets("Sheet1").Range("A1").PasteSpecial Paste:=xlPasteValues
でOKでもOKでした。

323 :デフォルトの名無しさん:2007/02/20(火) 01:40:09
どうでもいいけど、
シート名変更されると危なっかしいから、
シートのオブジェクト名でやった方が無難。
Sheet1.Range〜以下略
意味が分からんならVBA画面でシートを選択してF4押せ。

324 :デフォルトの名無しさん:2007/02/20(火) 01:50:00
ユーザーがSHIFT+クリックで複数のセルを選択するように
プログラム上で選択中のセルをさらに動的に増やしたいのですが
どうすればいいでしょうか。

325 :デフォルトの名無しさん:2007/02/20(火) 01:51:53
どういう風に増やしたいのか詳しく。
Offsetとかでいいならそれで。

326 :デフォルトの名無しさん:2007/02/20(火) 02:12:18
OffsetではなくResizeの方が良いのでは?

327 :デフォルトの名無しさん:2007/02/20(火) 03:12:28
飛び地で選択できるじゃないですか?
あんな感じで。

2点間を選択してもらって、その間の特定キーワードを含む
セルを自動的に選択する機能を作りたいのですよ。



328 :デフォルトの名無しさん:2007/02/20(火) 07:49:42
>>327
マクロの記録でctrlキーを押しながら
A1とA3を選択。
これで、離れたセルの指定方法は分かるだろ?

後は、定範囲内をFor Eachとかでまわして
該当セルのaddressとるなりして
同じように選択するだけ。

329 :デフォルトの名無しさん:2007/02/20(火) 11:06:07
Type MyTestType
ID As Integer
Name As String
End Type

Sub test()
Dim a(3) As MyTestType
'中略
i = TypeTest(a)
End Sub

Function TypeTest(a As Variant) As Integer
'省略
End Function

とコードを組むと、コンパイルエラーが出ます。
Functionの引数の型宣言で、配列を使うこともできませんが、
どのようにしたら、aをFunctionに渡すことができるでしょうか?

よろしくお願いします。

330 :デフォルトの名無しさん:2007/02/20(火) 11:24:55
VBAでどうやってコンパイルエラーを出したのか知りたいのだが。

331 :デフォルトの名無しさん:2007/02/20(火) 11:39:42
>>329
クラスを使え


>>330
メニュー > デバッグ > VBAProjectのコンパイル
も知らんのか?

>>329なら普通に実行したってコンパイルエラー出るし。
もしかしてexe吐くことがコンパイルだと思ってるのかな?

332 :デフォルトの名無しさん:2007/02/20(火) 12:08:03
>>331
クラスってどうつかえばいいのですか?
プロジェクトで挿入からクラスモジュールを挿入して、
Type文を打ち込めばよろしいのでしょうか?

それと、ここはsage推奨ですか?

333 :デフォルトの名無しさん:2007/02/20(火) 12:16:50
>>332
===== MyTestClass As クラスモジュール =====
Public ID As Integer
Public Name As String
===== EOM =====

===== Module1 As 標準モジュール =====
Sub test()
  Dim a(3) As New MyTestClass
  a(0).Name = "hoge"
  a(0).ID = 10
  i = TypeTest(a)
End Sub

Function TypeTest(a() As MyTestClass) As Integer
  Debug.Print a(0).Name
  Debug.Print a(0).ID
End Function
===== EOM =====

こんな感じで。
クラスモジュールの名前がAs 〜で使う宣言型になる点に注意。

> それと、ここはsage推奨ですか?
別に。回答者はageる必要が無いから慣例的にsageてるだけ。

334 :デフォルトの名無しさん:2007/02/20(火) 13:40:38
>>333
どうもです。

335 :327:2007/02/21(水) 02:04:24
マクロで記録したら文字列で指定してたからどうしたもんかと
思いましたが、addressでセル位置の座標を取れるからこれ使えばいいのかな。

問題は解決したけども、なんかほかにスマートな方法があるなら教えてくだされ。

336 :デフォルトの名無しさん:2007/02/21(水) 15:31:21
GetOpenFilename で「ファイルを開く」 ダイアログ
で左側のデスクトップやマイドキュメントが選べません。どうしてでしょうか?
参照設定で、Microsoft Runtime Scriptingは選択しています。
Office2003, XP Proです。

337 :デフォルトの名無しさん:2007/02/21(水) 15:49:59
> どうしてでしょうか?
環境が壊れてるからじゃねーの?
とりあえずOSとOfficeを再インストールしてみな。

それとGetOpenFilenameはApplicationオブジェクトのメンバなんで参照設定は不要だし、
Microsoft Runtime Scriptingではなく
Microsoft Scripting Runtimeだろ。これはFSOやDictionaryだからな。

338 :デフォルトの名無しさん:2007/02/22(木) 15:30:03
  row = 1
For Each a In IEobj.Document.body.getElementsByTagName("A")
If InStr(a.href, "http://xxx.com/") <> 0 Then
x = a.href
Worksheets(1).Cells(row, 1).Value = x
row = row + 1
End If
Next a
こんな感じのURLなのですが、同じアドレスは二度書き込まない風にできますか?

339 :338:2007/02/22(木) 18:01:47
処理重くなるだけかな
少しぐらい重なってもいいか・・・・

340 :デフォルトの名無しさん:2007/02/22(木) 19:58:29
>>338
普通に重複チェックして条件分岐すれば良いだけでしょ。
重複チェックにはいろんな手法があるのでお好きなもので。

341 :デフォルトの名無しさん:2007/02/23(金) 22:15:30
Dim myValue As Single
myValue = 1.0
Charts(1).Name = "Ver. " & myValue

としてエクセルのグラフのタイトルに、 Ver. 1.0 と入力したいのですが、Ver. 1 となります。
こういう場合は、どうすれば "1" を "1.0" と少数点付きにできますか?

342 :デフォルトの名無しさん:2007/02/23(金) 22:27:30
As String にするか
"Ver." & Format(MyValue, "0.0")で

343 :デフォルトの名無しさん:2007/02/23(金) 22:52:10
>>342
ありがとう!!!
できた〜!!!!!

ちなみにStringはダメでした。

ほんとにありがとう。

344 :デフォルトの名無しさん:2007/02/23(金) 23:15:34
ああ、"1.0"にしないと駄目だろうねw


345 :デフォルトの名無しさん:2007/02/24(土) 01:29:23
Win2000 SP4ではちゃんと動いていたのにXP SP2に持っていったらエラーにはならないんですけどまともに動いてくれません
主に使っている機能はActiveXのInetです。WEBを取り込んで検索して加工した文字列をエクセルに貼り付けてるだけです。

参照設定は正規表現というやつを使いたくて、MSVBScriptRegulerExpresion1.0と5.5を二つ入れました。
1.0と5.5は両方チェック入れたらまずいんでしょうか?本にはMSVBScriptを参照設定しろと書いてあっただけなので不明です。

あとMS Internet Transfer Control 6.0とMS Internet Controls も参照設定してあります。

Win2000 SP4はVB6.0、WinXP SP2はVB6.0ランタイムが入ってます。

最初から2行あったOption Explicit ?ともう一行は文の意味がわからなかったので消しました。

XPのファイアーウォールははずしてあります。

なぜXPだけで不安定になるのか原因わかりますでしょうか?

346 :デフォルトの名無しさん:2007/02/24(土) 01:33:32
うん、わかる

347 :デフォルトの名無しさん:2007/02/24(土) 01:37:51
ありがとうございます。試してみます。

348 :デフォルトの名無しさん:2007/02/24(土) 14:27:41
エラーの時にデバッグを選んだ後停止ボタンを押すと、フォームがひらくのですが、コード画面のままで維持できないのでしょうか?
その度にいちいちコード画面を選び編集したいコードの行を探さないといけないのはつらいです。

349 :デフォルトの名無しさん:2007/02/24(土) 15:09:31
'初心者です。


Sub なんでだろう@()
Dim あ As Long
あ = Worksheets("Sheet1").Cells(1, 1)
If あ > 3 Then
Worksheets("Sheet1").Rows("1:5").Select
End If
End Sub

'だと動くのに

Sub なんでだろうA()
Dim あ As Long
あ = Worksheets("Sheet1").Cells(1, 1)
If あ > 3 Then
Worksheets("Sheet1").Rows("1:あ").Select
End If
End Sub

'だと動きません。なんでだろう。。。
'親切な方教えてください。


350 :デフォルトの名無しさん:2007/02/24(土) 15:37:02
range("1:" & あ)では?

351 :デフォルトの名無しさん:2007/02/24(土) 15:48:27
>>349
×Worksheets("Sheet1").Rows("1:あ").Select
○Worksheets("Sheet1").Rows("1:" & あ).Select
○Worksheets("Sheet1").Range("1:" & あ).Select
○Worksheets("Sheet1").Rows(1).Resize(あ).Select

>>350
このコードを書いているモジュールによってはシートを省略しちゃうと正しく動作しないよ。
「Worksheets("Sheet1")」も書くか、「Rows以降を」と添えよう。

352 :349:2007/02/24(土) 15:49:50
>>350
ほえ〜。動きました。
なぜだか分からないけど、とにかくこれでやってみます!
ありがとうございました!

353 :デフォルトの名無しさん:2007/02/24(土) 16:05:06
>>351
あ、RowsのつもりがRangeって打っちゃったよ

354 :349:2007/02/24(土) 16:09:47
>>351
とにかくいろいろやり方があるんですね!
どうもでした。m( )m

モジュールって何?っていう段階なので、すべてがサッパリ妖精なのですが、
とにかく理解もせずに突き進んでみることにして見ます。。。

355 :デフォルトの名無しさん:2007/02/24(土) 19:58:05
エクセルのグラフの軸の書式設定にある
Y/数値軸目盛の最大値のところに初期入力してある値を取得する方法ってありませんか?

356 :デフォルトの名無しさん:2007/02/24(土) 20:22:45
初期値は自動じゃないのか?
まぁ、マクロ記録で変更してみりゃプロパティの名前がわかるだろ。

357 :デフォルトの名無しさん:2007/02/24(土) 20:35:27
>>356
自動です。
自動で入る初期値がほしいんですが、これに関しては
マクロ記録でいろいろ試してみましがはわかりませんでした。

358 :デフォルトの名無しさん:2007/02/24(土) 20:53:07
>>357
初期値変更するの記録すればわかると思うけど
ActiveChart.Axes(xlValue).MaximumScale
じゃない?

359 :デフォルトの名無しさん:2007/02/24(土) 21:14:35
>>358
ありがとうございます。
値の取得ができました。
初期値変更するの記録したつもりだったけど、わからなかったw

360 :デフォルトの名無しさん:2007/02/25(日) 14:25:00
あぁ〜ん、ユーザーフォームがうまく作れないよぉ〜〜〜ん!!

参考書ばかりが増えていく…

361 :デフォルトの名無しさん:2007/02/25(日) 14:29:14
わざわざユーザーフォーム作る香具師って馬鹿じゃね?
プログラミング能力の無さをさらけ出してるだけだよ。

362 :デフォルトの名無しさん:2007/02/25(日) 16:08:29
馬鹿が馬鹿を笑う、ここはそんなスレでつw

363 :デフォルトの名無しさん:2007/02/25(日) 17:30:50
>>361
kwsk

364 :デフォルトの名無しさん:2007/02/25(日) 22:30:07
ユーザーフォームを×ボタンをクリックして閉じるときに、
それと同時に上書き保存をしたいのですが
何か良い方法はありますか?

365 :デフォルトの名無しさん:2007/02/25(日) 22:33:26
>>364
UserForm_QueryCloseイベントに上書き保存のコードを書く


366 :デフォルトの名無しさん:2007/02/26(月) 02:57:29
動作しないユーザーフォームなら1分もかからずにちゃんと作れるよな。
これすらできないのは才能ないというかなんか根本的におかしい。

367 :デフォルトの名無しさん:2007/02/26(月) 04:05:54
>>361
の言ってる意味は全然変わらんが

>>366
なら分かる

368 :デフォルトの名無しさん:2007/02/26(月) 04:55:40
じゃ、>361はこう訂正してみよう。
>わざわざユーザーフォーム作る香具師って馬鹿じゃね?
→ユーザーフォーム作るのに苦労する香具師って馬鹿じゃね?

369 :デフォルトの名無しさん:2007/02/26(月) 05:03:58
>>368
納得した
ユーザーフォーム使う使わないは用途によるからな

370 :364:2007/02/26(月) 10:09:54
>>365
ありがとうございます!できました!
>>361
仕入・納品・在庫調べ等々、自分の仕事では
ユーザーフォームないと非常に入力がめんどくさいです。
なので自力で作成しました。
まあ、「市販のソフト買えよ!」と言われればそれまでですが。

371 :デフォルトの名無しさん:2007/02/26(月) 10:34:35
>>360がやろうとしてることと、>>361,>>366,>>368が指摘してることに遥かなる距離感を感じるのはなぜだろう。

>動作しないユーザーフォームなら

わざわざ動作しないフォームを作る暇人っているんだな。

372 :デフォルトの名無しさん:2007/02/26(月) 11:47:50
>>370
まさかそれをアクセスでなくエクセルでやってるとか・・・

373 :デフォルトの名無しさん:2007/02/26(月) 11:58:21
Excelが伝票というケースもあるだろ。Accessの仕事しかやったことないのか

374 :デフォルトの名無しさん:2007/02/26(月) 20:15:30
Cellの中に文字列があって、その文字列の長さを取得するにはどうすればいいか教えてください。
文字変数の長さの取得方法がわかりません。

375 :デフォルトの名無しさん:2007/02/26(月) 20:27:35
>>374
Len

文字変数の長さって何?

376 :デフォルトの名無しさん:2007/02/26(月) 20:40:36
>>375
説明がまずかったですね
たとえば、
a As String
b As Integer

a = "ABC" または a = Range("A1").Valueとして、このA1セルに"ABC"が入っているとします。
それで、 b をこの a の中に入っている文字列の長さの値を入れたいわけです。この場合は3になるわけですが
どうすれば b = 3 とすることが出来るかがわかりません。


377 :デフォルトの名無しさん:2007/02/26(月) 20:46:05
>>376
答え書いてあるやん

378 :デフォルトの名無しさん:2007/02/26(月) 20:55:51
b = Len( a )

まあいろいろ期待どおりに動作しない場合も多いがね。
b = LenB(a )

内部がEUCなのでバイトカウントでも(ry

379 :デフォルトの名無しさん:2007/02/26(月) 20:55:59
>>377
すいません。見落としていました。
>>375
ありがとう
はぁ、なんか疲れてるみたい・・・

380 :デフォルトの名無しさん:2007/02/26(月) 21:02:18
「文字列の長さ」を「文字変数の長さ」と言い換えたのは
意味があるのかと…思ったわけです。
深く考えすぎたか_| ̄|○

381 :デフォルトの名無しさん:2007/02/28(水) 15:39:38
マルチすみません。
情報が少ないですが以下の現象で困っております。
環境 WindowsXP Excel2003

エクセルのVisual Basic Editorで社内作成のコントロール(VB6にて)
をはりつけ、その後エクセルを終了すると必ずメモリがReadに・・・
のエラーがでてしまい困っています。あと2時間ほどで調べないといけない
のですが。。。誰かご教授お願いします。

382 :デフォルトの名無しさん:2007/02/28(水) 15:49:07
> 社内作成のコントロール
の問題を聞かれても、どうにもならんわな。

聞きたいなら最低限そのコントロールのソースを晒せ。
それが出来ないなら自社内で解決しろ。

383 :デフォルトの名無しさん:2007/02/28(水) 16:00:10
社内掲示板で2ちゃんねる使ってるなんてユニークな会社ですねー

384 :デフォルトの名無しさん:2007/02/28(水) 17:21:49
dim page as long
URL="http:xxx.com/&page="+cells(x,x)+"&main=
だとエラーは出ないんですが
URL="http:xxx.com/&page="+1+"&main=

URL="http:xxx.com/&page="+page+"&main=
だと型が一致しません13Errorとでるのですが、なぜでしょうか


385 :デフォルトの名無しさん:2007/02/28(水) 17:27:54
URL="http:xxx.com/&page=" & 1 & "&main="
URL="http:xxx.com/&page=" & page & "&main="


122 KB
■ このスレッドは過去ログ倉庫に格納されています

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.02.02 2014/06/23 Mango Mangüé ★
FOX ★ DSO(Dynamic Shared Object)