●EXCEL・VBA質問スレ ..
[2ch|▼Menu]
39:デフォルトの名無しさん
07/05/29 22:57:21
前スレでやったばっかりだけど、InStrじゃダメ?

InStr(cells(1,1),"きく") > 0

40:デフォルトの名無しさん
07/05/29 23:01:57
>>38
前スレでさんざん出てきた話だぞ?
具体的にどんな風か教えて。調べてどうしたいとか。
エクセル関数ならFIND、VBAならInstr。
>cells(1,1)ではまず"きく"は2文字なのであい、いう、うえ・・・と順に調べていく
検索対象行が10000行あったらどんだけ時間がかかると思ってるんだ…

41:デフォルトの名無しさん
07/05/29 23:16:01
>>39,40ありがとう
いるかくんとかぐぐったけど
そうゆう便利なのinstrは出てこなかったから。。

42:デフォルトの名無しさん
07/05/29 23:17:12
初歩的なこととは思いますが質問させてください…
自身のファイルがあるディレクトリとファイル(ブック)名を
知る方法がわかりません…

目的は、ブックのセーブと同時に、ブックと同じディレクトリに
hetml形式で保存(強制上書き)させたいのです。
何も考えずに
ActiveWorkbook.SaveAs _
FILENAME:="./" + ActiveWorkbook.Name + ".htm", _
FileFormat:=xlHtml
ってやったら、MyDocumentoに吐き出されてしまいました(´・ω・`)


43:デフォルトの名無しさん
07/05/29 23:25:22
ThisWorkbook.Path

44:デフォルトの名無しさん
07/05/29 23:28:51
>>42
With ActiveWorkbook
ActiveWorkbook.SaveAs _
FILENAME:= .Path & "\" & Mid(.Name, 1, Len(.Name) - 4) & ".htm", _
FileFormat:=xlHtml
End With

てか、ディレクトリ指定しなきゃThisWorkbookと同じ場所に保存されなかったっけ?
よくおぼえてねーや

45:デフォルトの名無しさん
07/05/29 23:33:11
エクセルのA列をまとめてコピーして、別途開けたノートパッドに貼り付け

これどうするの?
print #1,a
のaに列単位とかは指定できないっぽくて困ってます


46:デフォルトの名無しさん
07/05/29 23:41:53
>>45
print #なんて初めてしった。

使ったことないから知らないけど、
ForEachとかでまわして文字列で渡せば?

47:デフォルトの名無しさん
07/05/29 23:53:42
普通にA列選択してコピペすればいいじゃん
何いってるの?

48:デフォルトの名無しさん
07/05/29 23:55:03
<<46
200行くらいの大量なデータなので、ちょっとくどいかなぁと。
セルの切れ目でテキスト上改行するよう制御する必要もあるかもしれないし。
普通にマウス使えば(notepad起動・A列コピー・貼り付けで)直ぐなのですが、
諸般の事情により自動化させたいのです。

printはここで調べました。
URLリンク(www2.moug.net)

49:デフォルトの名無しさん
07/05/30 00:13:05
> 200行くらいの大量なデータなので
1個1個タイプするぐらいがちょうどいい

50:46
07/05/30 00:34:24
>>48
リンク先に答え書いてあんじゃん

>'指定範囲だけを出力したいときは .UsedRangeを _
> 指定範囲に代えればいいです。

これでできたよ。


クリップボード使えばいいのか。勉強になった。ウヒョー

51:デフォルトの名無しさん
07/05/30 00:54:02
コンパイルエラーがでる
ユーザー定義型は定義さていませんだって。

どうも
'Microsoft Forms 2.0 Object Library への参照設定が必要 _
参照設定リストに↑が無いばあいは、プロジェクトに _
いったんUserForm を挿入してすぐ解放してください。 _
これで、クリップボードとのやりとりをするDataObject _
が使用可能になります。
という箇所がわかっていないらしい

52:デフォルトの名無しさん
07/05/30 00:58:07
で?

53:46
07/05/30 01:05:44
>>51
VBEで、挿入→ユーザーフォーム
するとプロジェクトにフォームが表示されるから
右クリックで「UserFormの開放」でおk

確認は、ツール→参照設定で
Microsoft Forms 2.0 Object Libraryにチェック入ってればおk
参照設定で直接チェックいれてもおk


ついでに、

>Open myTextname For Output As io

だと上書きされるっぽいから追記したい場合は
Output → Append
に変更

いいこと教えてもらったからサービスな(はぁと
あとは自分で試行錯誤してくれぃ

54:デフォルトの名無しさん
07/05/30 01:09:55
>>46さんいろいろありがとう。
早速試してみます。

55:デフォルトの名無しさん
07/05/30 16:22:12
Type T
code As Integer
End Type

Sub abc()
Dim a As T, c As New Collection
c.Add Item:=a
End Sub

↑のコードを実行するとc.Addの行で
「コンパイルエラー:パブリックオブジェクトモジュールで定義されたユーザー定義型に限り、
変数を割り当てることができ、実行時バインディングの関数に渡すことができます。」
というエラーになってしまう。

いろいろ調べてみたところCollection側からTの型情報を取得できない?のがエラーの
原因でTを構造体ではなくてクラスにしてObjectとして渡せばOKというのはわかったんですが
構造体が必要なたびにいちいちクラスモジュールを追加するのは正直面倒くさいです
Collectionに構造体を素直にAddできる何かうまい方法ってないんでしょうか?



56:デフォルトの名無しさん
07/05/30 18:40:42
>>35
助かりました。ありがとうございます。

57:デフォルトの名無しさん
07/05/30 19:49:34
>>55
構造体管理クラス作って構造体毎にセッタゲッタ作ればいいんじゃね?

58:デフォルトの名無しさん
07/05/30 20:02:05
Enum T
code = 1
hoge = 2
hage = 3
End Enum

Sub abc()

Dim a(T.hage), c As New Collection
c.Add Item:=a

End Sub


59:デフォルトの名無しさん
07/05/30 23:42:10
エクセルを使って各セルの画素の色の
数値データ(#FFFFFFといったRGB)を
色に変えるマクロなのですが
URLリンク(uploader.fam.cx)
これだと一応動くのですが256色になってしまいます。
フルカラーで出力させるプログラムは
どのようにすればいいのでしょうか?

まったくもって初心者なので
完成されたマクロを出してくれるとありがたいです。
どなたかよろしくお願いします。

60:デフォルトの名無しさん
07/05/31 00:13:02
>>59
仕様

61:デフォルトの名無しさん
07/05/31 08:33:51
Excelは計算ソフトなので、色数は区分けに使える分だけあれば充分ということで
多くの色数を使えることよりも、使える色数減らして軽快に動くように作られてる

つまり、やろうとしてることからして、Excel使うのが間違い

62:デフォルトの名無しさん
07/05/31 09:39:27
>>59
htmlでも出力したら?

63:デフォルトの名無しさん
07/06/01 10:16:09
質問です。下記のようにコードを書いたのですが、エラーが出て
先へ進めません。修正箇所のご指摘とできれば修正後のものをお願いします。
内容はワークシートの中身をプリントするかしないかだけなのですが。

Public Sub PrintWorksheets2()
'declare variables and assign address
Dim intPrint As Integer, intCount As Integer, wkbHours As Workbook, shtCurrent As Worksheet
Set wkbHours = Application.Workbooks("t9-ex-e9.xls")
'ask user if he or she wants to print the worksheet
shtCurrent = wkbHours
For intCount = 1 To wkbHours.Worksheets.Count
intPrint = MsgBox(prompt:="Print " & shtCurrent.Name & "?", Buttons:=vbYesNo + vbExclamation)
If intPrint = vbYes Then 'if user wants to print
shtCurrent.PrintPreview
End If
Next intCount
End Sub

64:デフォルトの名無しさん
07/06/01 10:35:34
83265 2007/5/29 20:00 17.206 41.677  *
83267 2007/5/29 20:00 17.206 41.677  *
83268 2007/5/29 20:10 17.162 41.635
83269 2007/5/29 20:20 17.157 41.638
83271 2007/5/29 20:30 17.162 41.642
83273 2007/5/29 20:40 17.147 41.625
83275 2007/5/29 20:50 17.153 41.637  **
83277 2007/5/29 21:10 17.16 41.645  **

こういった10分ごとのデータが大量にあります。
*の列にあるように、重複データがあったり、
**の列のように間が飛んだりしていいます。
*は重複を削除、**には空白行を挿入して、
完全な10分置きの時系列データにしたいのですが。

数か月分をやれといわれたのですが、一つずつ目で
追ってる状態です。この初心者厨に
書いていただけませんか?
スレ違いなら、スレ教えてくださいませ。


65:デフォルトの名無しさん
07/06/01 11:43:03
行数分の配列用意して、
1行取得して、foreachで重複行チェック、
同じのがあったら配列のフラグたてる
データの行数分繰り返す。

あとは配列チェックしながら
削除するなり転記するなりでいいのでは?

66:デフォルトの名無しさん
07/06/01 11:44:54
これじゃあ、空白行に対応してないわな。スマソ

67:デフォルトの名無しさん
07/06/01 12:19:48
>>63
どこからつっこもうかと….
まず間違い箇所.
>shtCurrent = wkbHours ←型が違う上にオブジェクトにはSetステートメントがいる.
>intPrint = MsgBox(prompt:="Print " & shtCurrent.Name & "?", Buttons:=vbYesNo + vbExclamation)
shtCurrent.Name て…

一応プログラムはWorkbooks("t9-ex-e9.xls") の全部のシートを対象にしてるみたい
なので,修正を書いておくね.

68:デフォルトの名無しさん
07/06/01 12:22:07
Public Sub PrintWorksheets2()
'declare variables and assign address
Dim intPrint As Integer, wkbHours As Workbook, shtCurrent As Worksheet
Set wkbHours = Application.Workbooks("t9-ex-e9.xls")
'ask user if he or she wants to print the worksheet

For Each shtCurrent In wkbHours.Worksheets
 intPrint = MsgBox(prompt:="Print " & shtCurrent.Name & "?", Buttons:=vbYesNo + vbExclamation)
 If intPrint = vbYes Then 'if user wants to print
 shtCurrent.PrintPreview
 End If
Next
End Sub

ちなみにWorkbooks("t9-ex-e9.xls")がそのマクロが含まれているブックなら
ThisWorkBookでOK. もっと短くなる。

69:デフォルトの名無しさん
07/06/01 12:25:24
2024/7/5または45478の値を
2007/05/24または39226に変換するにはどうしたらいいですか?

70:デフォルトの名無しさん
07/06/01 12:30:22
>>64
列の構成がどうなっているかわからないよ?どこまでが一つの列なのか。
あとは、最初の83265とかの意味も。
もう一つは重複している場合、その列は必ず連続しているか、10行あとに
あったりするのかとか。

>>69
???
意味が不明。 2007/05/24→39226に変換という意味じゃなさそうだね?

71:69
07/06/01 12:39:54
>>70
2024/7/5→24/7/5
年/月/日→日/年/月になっていて
ほんとは07/05/24なんです


72:64
07/06/01 12:48:39
>>70
説明がまったくもって馬鹿でした。
*列、**列ではなく、*行、*行でしたすみません。
重複している場合は必ず連続しています。

2007/5/29 20:00 17.206 41.677  *
2007/5/29 20:00 17.206 41.677  *
2007/5/29 20:10 17.162 41.635
2007/5/29 20:20 17.157 41.638
2007/5/29 20:30 17.162 41.642
2007/5/29 20:40 17.147 41.625
2007/5/29 20:50 17.153 41.637  **
2007/5/29 21:10 17.16 41.645  **

こういった10分ごとのデータが大量にあります。
*の行にあるように、重複データがあったり、
**の行のように間が飛んだりしています。
*は重複を削除、**には空白行を挿入して、
完全な10分置きの時系列データにしたいのですが。

数か月分をやれといわれたのですが、一つずつ目で
追ってる状態です。この初心者厨に
書いていただけませんか?
スレ違いなら、スレ教えてくださいませ。


73:デフォルトの名無しさん
07/06/01 12:51:35
>>71
日/年/月の並びは面白いね…。
それを直せるエクセル関数はないかってこと?
それともVBA?

74:デフォルトの名無しさん
07/06/01 12:54:52
>>72
64で書いていた最初の83265とかは無視していいの?
あと、どこまでが一つのセル?


75:デフォルトの名無しさん
07/06/01 12:56:17
>>72
とりあえず重複なんか
フィルタ使えばいーだろ

わからなきゃ「Excel フィルタ 重複」とかでググれ

76:デフォルトの名無しさん
07/06/01 13:04:55
>>74

83265 2007/5/29 20:00 17.206 41.677  *
83267 2007/5/29 20:00 17.206 41.677  *
83268 2007/5/29 20:10 17.162 41.635
83269 2007/5/29 20:20 17.157 41.638
83271 2007/5/29 20:30 17.162 41.642
83273 2007/5/29 20:40 17.147 41.625
83275 2007/5/29 20:50 17.153 41.637  **
83277 2007/5/29 21:10 17.16  41.645  **
    I       I   I    I     I

の値ごとにセルが分かれています。
データによってセルが増えるデータもあるのです。
最初のは整理番号なのでやはりあったほうがよいです。

77:デフォルトの名無しさん
07/06/01 13:24:30
MyDate = Format(Sheets("Sheet1").Cells(GYOU1, 1), "mm/dd/yy")
Sheets("Sheet1").Cells(GYOU1, 1) = "20" & MyDate

78:デフォルトの名無しさん
07/06/01 14:15:30
>>76
どっちの整理番号を残すとかは考えずにいきます.
このスレ的には問題あるかもしれないけど,一応動くので.
Private Sub Sample()
Dim targetCell As Range
Dim date1 As Date,date2 As Date,date3 As Date
Dim intervalMin As Integer

Set targetCell = Range("B1")  ←最初に日付が入っているセル
Do Until targetCell.Cells(2,1)=""
 date1=targetCell+CDate(targetCell.Cells(1,2))
 date2=targetCell.Cells(2,1)+CDate(targetCell.Cells(2,2))
 interval = DatePart("n",date2-date1)
 If interval=0 Then
  Rows(targetCell.Cells(2,1).Row).Delete
  ElseIf interval>10 Then
   Rows(targetCell.Cells(2,1).Row).Insert
   date3=DateAdd("n",10,date1)
   targetCell.Cells(2,1)=Format(date3,"yyyy/M/d")
   targetCell.Cells(2,2)=Format(date3,"hh:mm")
 End If
 Set targetCell=targetCell.Cells(2,1)
Loop
End Sub

79:78
07/06/01 14:21:54
4行目,Dim interval As Integerの間違い
この場合,重複している時間のデータは2番目のデータが消える.

80:デフォルトの名無しさん
07/06/01 14:24:59
>>64
Sub NURUPO()
Sheets("Sheet2").Range("A1:E65536").ClearContents
LastRow = Sheets("Sheet1").Cells.SpecialCells(xlLastCell).Row
GYOU2 = 1
For GYOU1 = 1 To LastRow
If Sheets("Sheet1").Cells(GYOU1, 3) <> Sheets("Sheet1").Cells(GYOU1 + 1, 3) Then
For RETU = 1 To 5
Sheets("Sheet2").Cells(GYOU2, RETU) = Sheets("Sheet1").Cells(GYOU1, RETU)
Next RETU
GYOU2 = GYOU2 + 1
End If
If Sheets("Sheet1").Cells(GYOU1 + 1, 3) - Sheets("Sheet1").Cells(GYOU1, 3) >= 0.006945 Then
GYOU = Fix((Sheets("Sheet1").Cells(GYOU1 + 1, 3) - Sheets("Sheet1").Cells(GYOU1, 3)) / 0.006944)
GYOU2 = GYOU2 + GYOU - 1
End If
Next GYOU1
End Sub

81:デフォルトの名無しさん
07/06/01 14:32:00
>>78さん。
わざわざありがとうございました。動きました。
しかし、わたしの方の説明が悪く…。

83277 2007/5/29 21:10 17.16  41.645  
    I       I   I    I     I

ではなく

83277 2007/5/29 21:10 17.16  41.645  
    I           I    I     I

でした。日付と時刻は同一セルです。
申し訳ないです。見捨てずお願いします。


82:78
07/06/01 15:05:11
>>81 それを早く(ry  そっちの方が簡単だから。
Private Sub Sample()
Dim targetCell As Range
Dim date1 As Date, date2 As Date, date3 As Date
Dim interval As Integer

Set targetCell = Range("B1") 'Range("B1")の所は最初の年月が入っているセル
Do Until targetCell.Cells(2, 1) = ""
 date1 = CDate(targetCell)
 date2 = CDate(targetCell.Cells(2, 1))
 interval = DatePart("n", date2 - date1)
 If interval = 0 Then
  Rows(targetCell.Cells(2, 1).Row).Delete
  ElseIf interval > 10 Then
   Rows(targetCell.Cells(2, 1).Row).Insert
   date3 = DateAdd("n", 10, date1)
   targetCell.Cells(2, 1) = Format(date3, "yyyy/M/d hh:mm")
   Set targetCell = targetCell.Cells(2, 1)
  Else
   Set targetCell = targetCell.Cells(2, 1)
 End If
  targetCell.Select
Loop
End Sub


83:78
07/06/01 15:09:14
下から3行目のtargetCell.selectはあってもなくてもいい。
ちなみにこれは同時刻だったらあとのデータが一緒でもそうでなくても
消す。時刻以外の値も重複していないといけないのなら>>80さんのを参考に。

で、念のためシートをコピーしてそのシートで試したほうがいいよ。
マクロの画面でF8キーを押していくと動作をその都度動きを確認できる。
その場合はtargetCell.selectはあったほうがいいけど。

84:デフォルトの名無しさん
07/06/01 15:22:19
>>78
ありがとうございました。しっかり動きました。
今までは、一時間に144データなので
隣の列に1〜144を貼り付けて目で追ってました。

ホント感謝します。ペコリ。

>>80さんもありがとうございます。
次への参考とさせてもらいます。

85:デフォルトの名無しさん
07/06/03 10:45:26
いつもお世話になっています。
>>78さん、快適に動いています、
が、少し問題が出ました。

パターン1
84017 2007/6/1 9:50 17.111 41.619
84032 2007/6/1 12:00 16.977 41.501
分が連続していたらここは認識してくれない。

パターン2
84090 2007/6/1 16:50 17.056 41.605
2007/6/1 17:00
84099 2007/6/1 18:10 17.206 41.71
時間以上の欠落は無視する。

です。もしよろしければ教えてください。お願いします。



86:78
07/06/03 13:19:43
>>85
休日にお疲れです。
えっと、>>82の「interval = DatePart("n", date2 - date1)」の部分を
       「interval = DateDiff("n", date1, date2)」に変えてください。
少なくとも俺のパソコンではうまくいってる。 ちょっとミスってしまった。スマソ。


87:デフォルトの名無しさん
07/06/03 16:52:49
>>78さん

重ね重ねありがとうございます。
ばっちり動きました。がっつり空いたデータ間に
あっというまに行が空けられる所を見ていると、
とてもうれしげです。

ありがとうございました。ペコリ。

88:デフォルトの名無しさん
07/06/03 18:58:35
すいません。質問です。
Linuxの改行コードを記述する方法はないでしょうか。
Linuxが出力したcsvファイルをWindows(excel)でFSOを用いて
加工しているのですが、改行コードが異なるようで、
読み込んで別のファイルに出力するとサイズが変わります。

excelで加工後、ファイルによってはもう一度Linuxに戻すため、
できればLinuxの改行コードを挿入したいのですが、方法が
ありましたら教えてください

89:デフォルトの名無しさん
07/06/03 19:17:43
>>88
日本語とか入ってたら文字コード自体も変換しないとだめなんでは?
変換はlinuxのnkfなどでできる


90:デフォルトの名無しさん
07/06/03 19:24:51
LinuxだとLFかな?
WriteLineを使わずに Fso.Write(string & vblf) とするとか。

91:デフォルトの名無しさん
07/06/03 19:25:47
改行コードはWinの方が1バイト多いからLinuxなら読めるでしょ
余分なコードつきで

92:デフォルトの名無しさん
07/06/04 14:34:37
すいません、ちょっと質問なんですが、EXCEL2007ってFileSearch使えないんですか?

93:デフォルトの名無しさん
07/06/04 17:53:35
マクロ記録してみれば?

94:デフォルトの名無しさん
07/06/06 01:06:41
透過画像(GIF)を表示させてデスクトップとかフォームの下が見えるようにしたいんですが、
フォームにGIFを表示させても単にフォームを透過するだけで、意図した表示ができません。

要するにフォーム自体を透過させる必要があるんだと思いますが方法が分かりません。
どなたかご教授願います。

95:デフォルトの名無しさん
07/06/06 01:46:31
>>94
シェイプでやったらどうでしょう
今から変更は大変だろうけど
やり遂げた達成感はかなり得られるでしょう

96:デフォルトの名無しさん
07/06/06 06:51:22
他のドロー系ソフトを使ってGIF→WMFもしくはEMF化すれば大丈夫か。
メタファイル系ならオートシェイプと同じ扱いになるので

試しに「GIF WMF 変換」や「GIF EMF 変換」でぐぐってみたら
フリーソフトが結構あるな。

97:デフォルトの名無しさん
07/06/06 16:18:34
APIがあるんだけど難しいよ

98:デフォルトの名無しさん
07/06/06 21:38:45
>>95-97
シェイプが何かすらわからないド素人ですが、何から始めたら良いかも
分からないと言う状況だったのでググって探す取っ掛かりになりました。

時間は掛かると思いますが挑戦してみます。

99:デフォルトの名無しさん
07/06/08 10:27:05
ググってもわかりませんでした。教えてください。

テキストに
AA a: 01 b: 01,02,03,04 c:
AB a: 01,02 b: c:01





と書いてあるものがあります。
AA,ABともに、aの後に続く数字が全部でいくつあるのが、
bの後に続く数字がいくつあるのかという風に抜粋して、
数えた数字をエクセルに書き換えたいのですが
どうもがいてもわかりません。

どなたかおしえていただけませんでしょうか?
説明下手でごめんなさい。




100:デフォルトの名無しさん
07/06/08 12:02:43
>>99
もう少し具体的なテキストと、その場合の要求する結果のサンプルをよろしく。

101:デフォルトの名無しさん
07/06/08 12:56:28
Excel関係なく、単純なテキストファイル解析でしょ。
単にその結果をExcelシートに出力するってだけの話なので、セルへの代入以外はVBAの分野じゃないよな。>>16

ということで、このスレの範疇の部分だけ答えると、セルへの代入は、代入するセルのRangeオブジェクトに対して
「.Value = 代入値」ですよ、ってことで終わりだな。あとはスレ違いなのでよろしく。

他の人にも言っておくが、Excel付属のVBAでやるにしても、Excelのインスタンス使わずにVBScriptでもVB6でも出来るようなことは、
 VBA = [VB]言語による[A]pplication(Excel)操作
の分野ではなく、VB言語の分野なので、ここではスレ違いになるってことを覚えておいてね。
>>1に書いてある通り、VBA分野の話ならどんな事情でVBA使ってようと構わないけど、VBAの分野じゃないことをあえてVBAでやってるだけの奴はNGね。

102:デフォルトの名無しさん
07/06/08 13:03:14
頭固いなぁ

103:デフォルトの名無しさん
07/06/08 13:10:35
いや、そうでもないか

104:デフォルトの名無しさん
07/06/08 13:11:12
>>99

まずテキストのまま正規表現使って全ての数字を消すと
AA a: b: ,,, c:
AB a: , b: c:
のようになる
エクセルにコピーして区切り文字を":"にすると
AA a|  b|,,, c|   |
AB a|, b|  c|   |
とセルが分かれ後は","の数を数えて+1する関数をVBAで
作ればOK

105:デフォルトの名無しさん
07/06/08 14:43:43
>>104
それじゃ最初から数字がない場合と
数字が一つだけでカンマなしの
区別つかなくね?

106:デフォルトの名無しさん
07/06/08 17:49:21
>>105
それではこんな感じで
a:->:に変換
[a-z]:->:

エクセルにコピーして区切り文字を":"にすると
|01  |01,02,03,04|   |
|01,02|        |01 |

Sheet2に
=CountData(Sheet1!A1)
=CountData(Sheet1!A2)
ドラッグして必要なとこまで埋める

関数
Function CountData(a As String)
sa = Split(a, ",")
b = UBound(sa)
If b < 0 Then
CountData = 0
Else
CountData = b + 1
End If
End Function


107:デフォルトの名無しさん
07/06/10 18:48:31
Vista Ultimate, Excel2007です。

コントロールのボタンを作成(貼付け)したところ、
マクロ名を入力するダイアローグが出てきて、マクロ名を入力しました
(そのボタンに対応する処理のマクロを事前に作っていたので)。

その後、TextBoxの処理をする必要が出てきたため、
Private Sub CommandButton1_Click()の編集画面を表示するために
開発→デザインモードをクリックして、ボタンをクリックしたのですが
Private Sub CommandButton1_Click()の編集画面が表示されません。

どういう操作をすれば
Private Sub CommandButton1_Click()の編集画面が表示されるのでしょうか。

よろしくお願いします。



108:デフォルトの名無しさん
07/06/11 00:57:26
複数列のセルをフーリエ解析したいのですが、
A列からD列まで一列一列手動でやってマクロを記録したら下記のようになったのですが、
これをA列からIV列まで一気に行いたい場合にはどうまとめれば良いですか?


Application.Run "ATPVBAEN.XLA!Fourier", ActiveSheet.Range("$A$1:$A$256") _
, ActiveSheet.Range("$A$258"), False, False
Application.Run "ATPVBAEN.XLA!Fourier", ActiveSheet.Range("$B$1:$B$256") _
, ActiveSheet.Range("$B$258"), False, False
Application.Run "ATPVBAEN.XLA!Fourier", ActiveSheet.Range("$C$1:$C$256") _
, ActiveSheet.Range("$C$258"), False, False
Application.Run "ATPVBAEN.XLA!Fourier", ActiveSheet.Range("$D$1:$D$256") _
, ActiveSheet.Range("$D$258"), False, False

End Sub


109:デフォルトの名無しさん
07/06/11 01:57:51
普通にやればいいだけだよ

110:デフォルトの名無しさん
07/06/11 07:58:33
VBAでFREQUENCY関数を使いたいのですが、
キーボード入力の時の”配列数式の入力”は、
VBAでは、どう記述すれば良いのでしょうか。

よろしくお願いします。


111:デフォルトの名無しさん
07/06/11 08:05:38
つ FormulaArray

つーかVBAヘルプを 配列数式 で検索してみたらトップに出てくるじゃん

112:110
07/06/11 14:09:22
>>111

レスありがとうございます


113:107
07/06/11 14:48:11
現象の追加情報です。

デザインモードにして、コントロールにカーソルを合わせると、
ラベルやテキストボックスは、
カーソルが矢印付きの十字(コントロールを移動できる表示)に
変わるのですが、ボタンについては指の形のままです。

このデザインモード(ラベルにカーソルを合わせると矢印付きの十字に
変わる状態)のまま、カーソルをボタンの上に持って来てクリックすると
ボタンに関係付けられたマクロが実行されます。

これって正常な動作なんでしょうか?




114:デフォルトの名無しさん
07/06/11 20:40:20
どうでもいい

115:デフォルトの名無しさん
07/06/12 01:28:42
質問です。
Excel2000で以下のようにあるブックから新しいブックを作り
セルをCopyメソッドを使用してコピーしようとすると
「RangeクラスのCopyメソッドが失敗しました」と
エラーになってしまうのですが
CopyとPasteメソッドをつかってそれぞれのブックを
Activateにしてコピーしないと無理でしょうか?


Dim xlsApp As Excel.Application
Set newBook = Excel.Application

With newBook

Set newBk = .Workbooks.Add

〜編集処理〜

Workbooks(ブック1名称).Activate

Workbooks(ブック1名称).Application.Worksheets(シート名).Range("A1:A20").Copy _
.Workbooks(ブック2名称).Application.Worksheets(シート名).Range("A1")

End With

116:デフォルトの名無しさん
07/06/12 02:40:26
>>115
Set newBk = Workbooks.Add

Workbooks(ブック1名称).Worksheets(シート名).Range("A1:A20").Copy _
newBk.Worksheets(シート名).Range("A1")

こういうことか?


117:デフォルトの名無しさん
07/06/12 17:02:19
Excel2007です

新規ブックでシート上にシェイプを作成し、そのシェイプにマクロを登録します。
シェイプに登録したマクロはこれです。
sub a
thisworkbook.close
end sub

このシェイプをクリックするとエクセルが終了してしまいます。
「問題が発生したため・・・・」

この問題を回避する方法はありますか?


118:項目によるセルの参照ないし選択?
07/06/12 19:21:52
Excel2000のユーザーでVBAの入門者です。

[表]
列に最高気温、最低気温、平均気温という三つの項目を入れ 行に日付の項目を入れた表を
つくりました。下記はその具体例です。
A2 = "2007年1月1日", A3 ="2007年1月2日", A4 = "2007年1月3日",....(以後果てしなく続く)
B1 = "最高気温", C1 = "最低気温", D1 = "平均気温"

[VBAでやりたいこと]
例えば、2007年1月1日の最高気温の値をVBAで入力する場合に、A列の行から"2007年1月1日"
という値の入っているセル番号を探し、"最高気温"の項目と交わるセルをセレクトしたい。
セル番号で直接参照して選択させる方法だと汎用性がないので、項目によって参照させたいんです。

119:デフォルトの名無しさん
07/06/12 19:54:23
>>117
そのマクロを実行しない

120:デフォルトの名無しさん
07/06/12 20:05:58
>>118
A2を選択して
データ->フィルタ->オートフィルタ

121:項目によるセルの参照ないし選択?
07/06/12 22:32:41
>>120
助言して下さって、どうも有難う御座います。私の説明が間違っていたんでしょうか、
オートフィルタは私のやりたいこととはかなり違う気がします。
アクティブではなく「セレクト」という表現を使ったのがまずかったかもしれません。
正確な用語法が分からなくてすみません。

122:デフォルトの名無しさん
07/06/12 22:59:16
>>121
セル番号で直接参照して選択させる方法って何?

項目で参照させたいならセルに名前をつければ?

123:デフォルトの名無しさん
07/06/13 00:43:57
>>118
Find メソッドを使う
ワークシート関数のINDEX 、VLOOKUPを使う

124:デフォルトの名無しさん
07/06/13 09:07:26
どなたかご存じでしたら教えてください。

VBAからJAVAのクラスを使用するための手順を
ご存じでしたら教えてください。
(JAVAのアプリを実行する手順ではないっす)
JNIを使ってJAVAを呼び出すのでしょうか?

当方、VBAもJAVAも初心者なもんで、一連の流れを書いてくれると
ありがたいです。

スレチだったらスンマセン

125:デフォルトの名無しさん
07/06/13 09:22:55
>>124
スレ違いなのでさようなら
参考までに>>101の後半読んでおいてね

126:ここでナット
07/06/13 09:49:13
ちょっとアホな質問かもしれないですが、

VBAのフォームのソースだけを変更して、

それ以外の標準モジュールやシートの内容は

そのままにする事をプログラム化する方法は

ありますでしょうか?

※ボタンを押すだけでソースだけ更新みたいな事です。



127:デフォルトの名無しさん
07/06/13 09:59:13
VBAでグラフを描きたいのですが、第2軸の目盛の最大、最小の指定は
どうすれば良いのでしょうか。
(下記は主軸の場合ですが、どのように変えれば良いのでしょうか)

With .Axes(xlValue)
.MinimumScale = 0
.MaximumScale = 1
End With

よろしくおねがいします。

128:デフォルトの名無しさん
07/06/13 10:17:52
>>127
操作をマクロに記録して睨めっこ。

129:デフォルトの名無しさん
07/06/13 10:37:42
どこで聞いて良いかわからなかったんだが、
膨大な量の乗車案内を検索かけたいんだが、何か良い方法はないだろうか?
東京→上野
東京→新宿
東京→池袋
東京→・・・
   ・
   ・
   ・

130:117
07/06/13 10:40:04
>>119
ありがとうございます。
現在はその回避方法を採用するつもりです。

ただ、その現象が当方の環境によるものかが判断できません。
みなさんの所でも同じ現象が起こりますでしょうか?

また、他の回避方法もありましたらお教えください。

131:デフォルトの名無しさん
07/06/13 11:44:24
>>126
具体的には?

132:ここでナット
07/06/13 11:59:54
>>131

ソースに不具合があったので、ソースだけ更新を行いたいです。

エディター画面を開いてソースを書き換える作業すれば良い事なのですが

その作業を行える人がいないので、簡単にソースだけを書き換える方法を探してます。

例えば、別のExcelマクロを用意してその中に新しいソースを入れて、

ボタンを押して実行すると、変更先のExcelマクロのソースだけが更新するみたいな

事がやれたらいいなと思っています。



133:デフォルトの名無しさん
07/06/13 18:15:41
>>130
当該ブックのみ終了。再現しません


134:デフォルトの名無しさん
07/06/13 18:26:31

>>132
 . . .
具体的には?

URLリンク(dictionary.goo.ne.jp)


135:デフォルトの名無しさん
07/06/13 19:08:08
>>132
エクスポートインポート

136:デフォルトの名無しさん
07/06/14 01:29:13
教えてください。
ボタンを押すと、C→File→にあるdata.csvを開いて処理開始なんですが、
データが無い場合にエラーメッセージを表示するよう仕組んでと言われまして。

ChDir "C:\File\data.Csv"
Workbooks.Open Filename:= _
"C:\File\data.Csv"

とこのあと、if then 文を書けばいいと思うのですが、
If Dir("C:\File\data.Csv") = "" Then
MsgBox "DataBook.xlsは見つかりません"
End If
Exit Sub
こんなん書いたんですが、勿論動きません。
IF文以下お教え願います。


137:デフォルトの名無しさん
07/06/14 01:31:43
すみません、表記間違ってました。

MsgBox "DataBook.xlsは見つかりません"

  ↓

MsgBox "data.csvは見つかりません"  の間違いです


138:デフォルトの名無しさん
07/06/14 01:35:16
あとじゃなくて先にしろ

139:デフォルトの名無しさん
07/06/14 06:08:04
If Dir("C:\File\data.Csv") = "" Then
 MsgBox "data.csvは見つかりません"
 Exit Sub
End If
 ファイルオープン処理

動かなければどこのコードで動かないのか確認してから考えた方が…。


140:127
07/06/14 10:54:26
>128

レスありがとうございます。それしかないですか^^;



141:デフォルトの名無しさん
07/06/14 11:08:33
EXCEL2007のVBAで、複合グラフ(折れ線)を描いたのですが、
グラフの描画領域が、指定したセル範囲をオーバーして描かれます。
指定したセル範囲に収まるようにするには、どうすれば良いのでしょうか

列(縦)方向はぴったり合うのですが、
行(横)方向に幅がオーバーします(左端も少しセルの左端からズレます)。

<コード>
Dim dataRg As Range, graphRg As Range
Sheets("DATA1").Select
Set dataRg = Sheets("DATA1").Range(Cells(data_row_from, data_col_from), Cells(data_row_to, data_col_to))
Set graphRg = ActiveSheet.Range(Cells(graph_row_from, graph_col_from), Cells(graph_row_to, graph_col_to))
Sheets("CHART").Select

With ActiveSheet.ChartObjects.Add(graphRg.Left, graphRg.Top, graphRg.Width, graphRg.Height).Chart
.SetSourceData Source:=dataRg, PlotBy:=xlColumns
.ChartType = xlLine
.HasTitle = False
.Axes(xlCategory, xlPrimary).HasTitle = False
.Axes(xlValue, xlPrimary).HasTitle = False
.HasLegend = False

.SeriesCollection(1).Border.ColorIndex = 41
.SeriesCollection(2).Border.ColorIndex = 53
.SeriesCollection(2).AxisGroup = xlSecondary
End With


142:デフォルトの名無しさん
07/06/14 13:39:11
>>140
With ActiveChart.Axes(xlValue, xlSecondary)
.MinimumScale = 0
.MaximumScale = 1
End With

143:117
07/06/14 13:52:30
>>133
そちらの環境では再現しませんでしたか。
情報ありがとうございます。

もう一台、2007をインストールしたPCを用意したのですが、
そちらでも100%再現しました。

マクロを直接実行した場合は問題なく当該ブックのみ終了するのですが、
そのマクロをシェイプに登録し、そのシェイプをクリックすると
ブックが閉じたあとにExcelが異常終了してしまいます。

ブックを変更していた場合、保存を確認するダイアログがでますが、
「キャンセル」を選択した場合は問題なく、「はい」「いいえ」を
選択した場合は異常終了となります。

ただ、他のブックを開いている場合は当該ブックのみ終了し、
Excelの異常終了はありません。

前回質問時はUpdateしてませんでしたが、Updateした環境でも
同様でした。

とりあえず、他の掲示板などでも同じ質問をしてみてから
マイクロソフトに問い合わせをしてみようと思います。

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

144:デフォルトの名無しさん
07/06/14 15:20:06
>>132
VBE.CodeModuleのInsertLines(), DeleteLines(), ReplaceLine()あたり。
VBEを使うには、なにか制限なり手順なりがあったような気もする。
実行も、セキュリティレベルを下げる必要があるかも。

まぁ、そのような状況にならないように、アプリはアドインで作った方がいい。

145:デフォルトの名無しさん
07/06/14 15:33:12
>>143
他の環境でも再現するんだ
何か共通でインストールしてるものに影響されてるのかな?

146:144
07/06/14 15:37:08
URLリンク(sourceforge.jp)から、vbaunitというのをダウンロードして、
新規Bookを開き、参照設定でVBAHelper.xlaと「Microsoft Visual Basic for Applications
Extensibility 5.3」を参照する。
新規にモジュールを作成し(Module1)、次のコードを貼り付け実行すると、3行目が修正される。
Option Explicit

Sub foo()
Dim cm As CodeModule
Set cm = VBAHelperModule.VBAHelperLookupCodeModule("Module1")
cm.ReplaceLine 3, "Sub bar()"
End Sub


147:117
07/06/14 18:15:07
>>145
こちらのテスト環境ですが、どちらも XP Pro SP2 で Office 2007 Enterprise です。
ただ、一方は Virtual PC 上の XP に Excel2007 のみをインストールした状態です。

今のところ考えられる条件は
・シェイプにマクロを割り付けてクリックで実行
・現在のブックのウインドウが閉じられる
・他のブックのウインドウが開いていない

thisworkbook.close 以外にも、これらのコードでもだめでした。
 workbooks(1).close
 window(1).visible = false

148:デフォルトの名無しさん
07/06/14 19:01:36
>>147
なるほど、おそらく2007固有の現象ということですな
2007持ってないんで他の持ってる人に試してもらいたいね

149:140
07/06/15 09:13:16
>>142
レスありがとうございます

150:デフォルトの名無しさん
07/06/15 16:13:53
Rangeの最初の位置を(左上)得たいのですが、どうするのが簡単なんでしょ。

ActiveSheet.Range("テーブル[列]").Offset(0, 0)

Offsetでよいのかな?うまくいっているみたいですけど

151:デフォルトの名無しさん
07/06/15 16:19:45
ActiveSheet.Range("テーブル[列]")(1)

など



152:150
07/06/15 16:26:32
Excel2007です。
>>151
サンクスです。

でじつは、Rangeオブジェクトを for で回そうと、

Dim StartCell As Range, LastCell As Range
Set StartCell = ActiveSheet.Range("テーブル[列]").Offset(0, 0)
Set LastCell = ActiveSheet.Range("テーブル[列]").End(xlDown)

' 資産に関連するもの更新
For i = StartCell.Row To LastCell.Row
   CalculateTable (ActiveSheet.Cells(i, 4))
Next i

としていたのですが、もっと簡単な書き方はないでしょうか?

Dim Cell As Range
For Each Cell In ActiveSheet.Range("テーブル[列]")
   CalculateTable (Cell)
Next
とすると、 CalculateTable (Cell) で、オブジェクトが必要です、と怒られてしまいます。 orz


153:150
07/06/15 16:30:12
>>152
うああああ、
   CalculateTable (Cell)
じゃなくて、
   CalculateTable Cell
にしたら、エラーでなくなった orz
マジVBAわかんねえええええ。

なんだこら

154:デフォルトの名無しさん
07/06/15 16:37:34
関数単体で引数()でくくるとなりますね

155:デフォルトの名無しさん
07/06/15 21:01:14
たぶん配列とまぎらわしいからだろ

156:初心者
07/06/17 13:50:18
はじめまして、VBAをやり始めたばっかりで全然わからないので教えて下さい。

(1)1+2+3+…+10を計算する
(2)1+3+5+…+19を計算する
(3)1+4+9+…+100を計算する
と言う問題で以下の空欄にあてはめるものを答える問題です。

Sub ex()
Dim x As Integer, sum As Integer
sum = 0
For x = 1 To 10
(空欄)
  Next x
Msgbox "合計=" & sum
End Sub

長々とすみません。よろしくお願いします。

157:デフォルトの名無しさん
07/06/17 13:58:01
>>156
宿題だとばれると教えてもらえないから、もう少し、利き方変えた方がいいぞ

あと「よろしくお願いします」って、お前他力本願スギ。
どこが、わからなくて、どこで詰まっているかを質問しよう。

158:デフォルトの名無しさん
07/06/17 14:01:01
(1) sum = sum + x
(2) sum = sum + (2*x -1)
(3) は自分で考えろ馬鹿

159:初心者
07/06/17 15:52:53
すいません。(3)がわかりません

160:デフォルトの名無しさん
07/06/17 16:36:26
sum = sum + (5*x -1)

161:初心者
07/06/17 17:02:14
なぜそうなるのでしょうか?

162:デフォルトの名無しさん
07/06/17 17:12:23
>>160
ワロタ

163:デフォルトの名無しさん
07/06/17 17:48:13
>>161
悪いことは言わん。
算数からやり直せ。

164:デフォルトの名無しさん
07/06/17 18:14:15
なんでまたVBAのスレに質問してくるの?
VBAどころか、ただのアルゴリズム…いや、算数か。の問題だろ。

法則を考えろよ…。

165:デフォルトの名無しさん
07/06/17 18:27:48
言っておくけど160のは違うぞ。

ヒント。
sum=1+4+9+16+25+36+49+64+81+100
これで分からなければ終わってる。

166:デフォルトの名無しさん
07/06/17 18:41:58
気がつかなかった俺オワタw

167:デフォルトの名無しさん
07/06/17 18:46:23
わからない。答え教えてもらえないですか?

168:デフォルトの名無しさん
07/06/17 18:56:47
(3)は
sum=sum+(x*x)


169:デフォルトの名無しさん
07/06/17 18:57:32
>>156
(2)
For i = 1 To 19 Step 2: sum = sum + i: Next: Exit For

(3)
Select Case x
Case 1: sum = sum + 1
Case 2: sum = sum + 4
Case 3: sum = sum + 9
Case 4: sum = sum + 16
Case 5: sum = sum + 25
Case 6: sum = sum + 36
Case 7: sum = sum + 49
Case 8: sum = sum + 64
Case 9: sum = sum + 81
Case 10: sum = sum + 100
End Select

これでいーだろ







まじめに(3)のヒントだすなら「^2」


170:デフォルトの名無しさん
07/06/17 19:06:07
コーディングより1+4+9+…+100が全くわからなかった。
オワテルwww

171:デフォルトの名無しさん
07/06/17 19:30:52
をいをい…。

つうか>>156、その問題は学校の問題か?職場の問題か?

172:デフォルトの名無しさん
07/06/17 20:30:10
>>169
ヒント:「For x = 1 To 10」部分は固定

173:169
07/06/17 21:01:49
>>172
ん?
(2)のことならxでループさせてないんだけど?
試してないからわからんけど、ネストされたForで答えでない?

意味取り違えてたら堪忍

174:初心者
07/06/17 21:49:26
2乗はどうあらわしたらいいのですか?

175:デフォルトの名無しさん
07/06/17 21:55:05
>>174
>>169

176:デフォルトの名無しさん
07/06/17 23:10:44
>>173
Sub ex()
Dim x As Integer, sum As Integer
sum = 0
For x = 1 To 10
(空欄)
  Next x
Msgbox "合計=" & sum
End Sub

の中で変えて良いのは(空欄)の部分だけ
単に(1)(2)(3)の計算ルーチンを作れば良いだけではなく
1 To 10のxのループを使った上で解かなければならないという条件

177:デフォルトの名無しさん
07/06/18 00:10:28
偉そうに答えてる人の方がネタに見える…
(1) sum = x + sum
(2) sum = x * 2 - 1 + sum
(3) sum = x ^ 2 + sum


178:デフォルトの名無しさん
07/06/18 00:55:34
>>177

ありがとうございました!独学なんで分からないところがたくさんですm(__)m

179:デフォルトの名無しさん
07/06/18 01:03:28
>>178
Excelより先に算数の勉強をし直した方が良いぞ。

180:169
07/06/18 01:14:50
>>176
あ〜ごめん
xを必ずループさせろとは書いてなかったから

ちなみに
俺が書いた(2)が空欄に入れるものだってわかってるよね?
sum = 0
For x = 1 To 10
For i = 1 To 19 Step 2: sum = sum + i: Next: Exit For
Next x
Msgbox "合計=" & sum
End Sub
ってことね

答えが先にかかれてたからふざけてみたんだけど
ふざけすぎたかw
普通なら当然>>177だわなw


181:デフォルトの名無しさん
07/06/18 04:00:12
ネタなのはわかるがiはどこから出てきたんだw

182:デフォルトの名無しさん
07/06/18 16:22:16
EXCEL2003です。
半角アルファベット文字列の先頭だけ大文字にしたいのですが、
適切なものが見つかりません。

ググってProperを見つけましたが、これは先頭を大文字にするだけでなく
先頭以外の大文字を小文字にしてしまいますよね。

helloWorld → HelloWorldとしたいのですが、適切な方法を
教えていただけますか?

183:デフォルトの名無しさん
07/06/18 16:54:13
最初の一文字を取り出して大文字にすれば?

184:デフォルトの名無しさん
07/06/18 17:31:56
s = "helloWorld"
Mid$(s, 1, 1) = UCase$(Mid$(s, 1, 1))


185:デフォルトの名無しさん
07/06/18 21:59:57
Midステートメント使う人久しぶりに見た気がする
Midステートメント自体は自分で使いまくってるからよく見てるが
公開されたソース見ても、こういうところの回答見ても
使ってる人殆ど居ないからなぁ

ところで、Leftステートメントは無いから代入左辺はMidでいいが
右辺の関数はMidではなくLeftの方がいいのでは?
つ Mid$(s, 1, 1) = UCase$(Left$(s, 1))

まあ実はMidもLeftも無くてもOKなんだけどね
Midステートメント側で置換文字数指定していれば、何文字代入しようと指定文字数以外は置換されない
つ Mid$(s, 1, 1) = UCase$(s)

逆に代入する文字数を指定しておけば、置換する文字数は指定しなくても問題なかったりする
つ Mid$(s, 1) = UCase$(Left$(s, 1))

186:デフォルトの名無しさん
07/06/18 22:32:41
>>185
横レスだが、勉強になった

187:デフォルトの名無しさん
07/06/18 22:41:49
つかMidって参照だけかと思ってたw

188:デフォルトの名無しさん
07/06/18 23:11:52
MSbasicからの伝統で、mid$は関数版とステートメント版がある。

189:デフォルトの名無しさん
07/06/19 12:08:51
エクセルソフトを持ってないので、フリーソフトのOPENOFFICEを使用
ダウンロードしてVBAは作成できるんでしょうか?


次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

4253日前に更新/289 KB
担当:undef