[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 2chのread.cgiへ]
Update time : 04/22 19:53 / Filesize : 149 KB / Number-of Response : 514
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Excel VBA質問スレ Part12



1 名前:デフォルトの名無しさん mailto:sage [2009/07/14(火) 19:07:54 ]
ExcelのVBAに関する質問スレです

前スレ pc12.2ch.net/test/read.cgi/tech/1241885130/

★1 質問テンプレ(雛形)は用意しませんが、OSとExcelのバージョンは必ず書きましょう。

★2 ExcelのVBA以外の部分に関する質問はNGです。
   但し、VBA無しでも出来ることだが、あえてVBAでやりたいって物に関してはOK。

★3 ExcelのVBE(Visual Basic Editor)を使うとしても、VBAの分野以外に関してはスレ違いです。

 VBAとは、『Visual Basic for Application』の略で
  Application
  ├Workbooks
  |└Workbook
  |  ├Worksheets
  |  |└Worksheet
 というApplication以下のオブジェクトを、VB言語で操作するものを指します。
 例えExcel付属のVBE(Visual Basic Editor)を利用しようとも、このApplication以下のブックやシート、
 セルやオブジェクト等を操作するもの以外はVBA分野の話ではないので、ここでは聞かないでください。

★4 とりあえず、Excelのインスタンスを作らずにVB6で出来ることは全てスレ違いだと思ってください。

★5 レベルはどうあれ、ここはプログラマ用の板スレです。プログラマとは、自分でプログラムを組み
   コードを書く人の事なので、自分でやるきは全く無く、丸投げしようって人はお断りです。
   ヒントを貰えばあとは自力でなんとかしますって人のみどうぞ。

★6 わからなければとりあえず「マクロの記録」(Alt, T, M, R)

87 名前:デフォルトの名無しさん [2009/07/20(月) 17:22:16 ]
winXP,excel97

ユーザーフォームに6個のオプションボタンを配置し、3つまで選択可能にしたいです
これは可能なのでしょうか?
できるなら、方法を教えてください

プロパティをいじってみたけど上手くいきませんでした



88 名前:デフォルトの名無しさん mailto:sage [2009/07/20(月) 17:32:04 ]
グループ化 でぐぐれ

89 名前:デフォルトの名無しさん mailto:sage [2009/07/20(月) 17:39:13 ]
・グループネームを全部違うのにして全部選択可能にする
・押された時のイベントで全部のボタン調べて3つ以上チェック入ってたらキャンセル

でどうだろう
コードはわかんね

90 名前:デフォルトの名無しさん [2009/07/20(月) 17:43:06 ]
>>87

普通はオプションボタンは、一つを押すと他の唯一あるTrueの奴が消えることになる。
たとえば、
○○●●●○
のとき、
一番左のを押すとどれをFalseにすればいいかわからないから、根本的に無理のはず。

やりたいなら、チェックボックス6個に
 Trueにしたときに、
  それをあわせてTrueが3つになったらなら
   他のFalseなチェックボックスを選択不能にする。
 Falseにしたときに、
  他のチェックボックスを選択可能にする。
的なことを書けばいいと思う。

91 名前:デフォルトの名無しさん mailto:sage [2009/07/20(月) 17:46:44 ]
>>85
たとえば暇つぶしに作った業務システムが知らないうちに改修されてて、
コメントしたアニメセリフとかエロ話とか上司の悪口とかを書いてて、
しかもそれが削除されないまま全社配布されたとかそんなの?

92 名前:デフォルトの名無しさん mailto:sage [2009/07/20(月) 17:48:09 ]
オプションボタンを1フレームごとに配置するとかだな?
フレームの非表示って出来たっけ

93 名前:デフォルトの名無しさん [2009/07/20(月) 18:03:36 ]
>>49 
これを使わせていただきます。
コードが1/3以下になりました。

他、レスしてくれた方もありがとうございました。

94 名前:デフォルトの名無しさん mailto:sage [2009/07/20(月) 18:08:01 ]
>>92
プロパティのvisibileをfalseにすれば良いんじゃね?


95 名前:87 mailto:sage [2009/07/20(月) 18:24:56 ]
みなさんレスありがとうございます
グループ化を試してみます
無理なら>>90の案を試してみます



96 名前:デフォルトの名無しさん [2009/07/20(月) 20:58:53 ]
Windows XP X64
Excel2003
を使用しております。

エクセルにボタンを追加して、
Sub Botton_Click()

'Book1を開く
Workbooks.Open "C:\Book1.xls"

'Book2にあるSheet1をBook1のSheetにコピー
Workbooks("Book2.xls").Worksheets("Sheet1").Copy _
After:=Workbooks("Book1.xls").Worksheets("Sheet1")

End Sub

といった感じにボタン押下時に別なブックにシートをコピーしたいのですが
「インデックスが有効範囲にありません」
というエラーが出てしまいます。
VBA初心者で初歩的な質問で申し訳ありませんが、どのようにすれば宜しいでしょうか?

97 名前:デフォルトの名無しさん mailto:sage [2009/07/20(月) 21:10:08 ]
コピー先のシートをactivateしてみるといんじゃね

98 名前:デフォルトの名無しさん mailto:sage [2009/07/20(月) 21:28:31 ]
>>97
アクティブにするのを見落としてました・・・
ありがとうございましたm(__)m

99 名前:デフォルトの名無しさん mailto:sage [2009/07/20(月) 21:38:55 ]
シートのコピーとか確かActiveでなくても普通にできた気がするから釈然としないけどそれで解決したんならいいのか・・・
Book2.xlsが開いててシート名も間違いなければそのままでなぜ駄目なのか?

100 名前:デフォルトの名無しさん mailto:sage [2009/07/20(月) 21:47:43 ]
Workbooks.Open "C:\Book1.xls"
でBook2が非アクティブになったためか、

Workbooks("Book2.xls").Worksheets("Sheet1").Copy _
After:=Workbooks("Book1.xls").Worksheets("Sheet1")
Sheet1が2つあるためか

101 名前:デフォルトの名無しさん mailto:sage [2009/07/20(月) 23:37:54 ]
環境
・WindowsXp
・Excel2003



sub 修正()

On Error Resume Next

Dim i as Integer

For i 136 to 140 step 1
If Range("AT7").value=Range("C"&i) then
Select Case Range("AT7").value
Case "お菓子"
Range("AT7").Activate
Activecell.offset(-43,-4).Activate    ←ここでB6がアクティブにならない
Activecell.value="お菓子購入"
End Select
End If
Next

End sub



上記のコードで矢印の部分「Activecell.offset(-43,-4).Activate」でB6がアクティブにならず、
AT7がアクティブのまま「お菓子購入」が入力されてしまいます。何が原因でしょうか?
すみませんがよろしくお願いします。

102 名前:デフォルトの名無しさん mailto:sage [2009/07/20(月) 23:58:26 ]
わからんがとりあえずOn Error Resume Next を外せばデバッグしやすいんじゃね

103 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 00:00:05 ]
あーわかった
Activecell.offset(-4,-43).Activat
にしてみ

104 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 00:15:04 ]
AT7からB6なら ActiveCell.Offset(-1, -44).Activate だな

105 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 00:17:38 ]
>>102
参考書に書いてあったのでよく分からないままいつも使ってたんですが
初心者はあまり使わないほうがいいんでしょうか?

>>103
>>104
ありがとうございます。RowとColumnを逆にしてたんですね。初歩的なミスで質問してしまってすみませんでした



106 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 00:26:19 ]
vbに限らずgoto系は使わんほうがいいらしいぜ

107 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 01:20:19 ]
>>105
もう見てないかもしれないけど「Activate〜Active」とか「Select〜Selection」が並んでいた場合は
1行にまとめて書けることが多い。

Range("AT7").Activate
Activecell.Offset(-1, -44).Activate
Activecell.Value = "お菓子購入"

↑この3行は1行にまとめられる。↓

Range("AT7").Offset(-1, -44).Value = "お菓子購入"

108 名前:デフォルトの名無しさん [2009/07/21(火) 13:36:15 ]
現在Excelでソルバーをマクロで操作するプログラムを作っています。

Sub ソルバーループ()
With Worksheets("jack")
For i = 1 To 10
With Worksheets("jack")
Solverok setcell:="$E$1", MaxMinVal:=2, ByChange:="$A$2:$D$2"
‘目的セルをE1として、その最小値を求める。変数はA2:D2。

SolverAdd CellRef:="$F$1", Relation:=1, FormulaText:="$G$1"

SolverSolve Userfinish:=True
SolverFinish KeepFinal:=1
Worksheets("Sheet1").Cells(i + 0, 5) = Worksheets("jack").Cells(1, 5)
Worksheets("Sheet1").Cells(i + 1, 1) = Worksheets("jack").Cells(2, 1)
Worksheets("Sheet1").Cells(i + 1, 2) = Worksheets("jack").Cells(2, 2)
Worksheets("Sheet1").Cells(i + 1, 3) = Worksheets("jack").Cells(2, 3)
Worksheets("Sheet1").Cells(i + 1, 4) = Worksheets("jack").Cells(2, 4)

End With
Next
End With

このプログラムのなかの
SolverAdd CellRef:="$F$1", Relation:=1, FormulaText:="$G$1"
という制約条件で、$G$1 を $G$10 まで変化させていき、各制約条件ごとに一つずつ
結果をワークシートのsheet1に書き込んでいきたいのですが
SolverAdd CellRef:="$F$1", Relation:=1, FormulaText:="$G$1"の部分に
どのようにして i を組み込めばいいでしょうか?
ほんの少しのヒントでも非常に有難いので、お力添えくだされば幸いです。
皆様お忙しいでしょうが、どうぞよろしくお願いいたします。。。


109 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 13:43:38 ]


110 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 15:27:22 ]
Excelで選択したセルの端をドラッグすると切り取りと張り付けになると思うんですけど
この機能自体を使用禁止にすることって出来ますか?

111 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 16:21:06 ]
>>108
&

112 名前:デフォルトの名無しさん [2009/07/21(火) 17:13:53 ]
すみません質問です。
C列に"abc"という文字列があった場合、その行全体を削除し
上に詰めるというマクロを組みたいのですが
どなたか教えていただけますでしょうか。
尚、オートフィルタを使わないやり方でお願い致します。


113 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 17:23:40 ]
上?
左じゃなくて?

114 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 17:28:01 ]
>>112
1.C列に文字列abcがあるなら行削除

2.配列に

115 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 17:30:25 ]
とりあえず4000行見るマクロ
Sub aaa()
For a = 1 To 4000
If Cells(a, 3) = "abc" Then Rows(a).Delete shift:=xlUp
Next
End Sub



116 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 17:39:44 ]
>>112
Sub a()
  For r = ActiveCell.SpecialCells(xlLastCell).Row To 1 Step -1
    If Cells(r, 3) = "abc" Then Rows(r).Delete
  Next
End Sub

>>115
上からだとabcが連続していた時に消えない

117 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 17:41:30 ]
>>115
これだと2行つづいて"abc"があった場合抜けてしまわない?

オートフィルタを使った方法を教えて欲しい

118 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 17:47:51 ]
オートフィルタはabcが隠れるだけで本当に消えるわけじゃないからなあ

119 名前:デフォルトの名無しさん [2009/07/21(火) 18:11:41 ]
>>108
そんなの余裕だろうが。

SolverAdd CellRef:="$F$1", Relation:=1, FormulaText:="G(1+i)"

で一発だ。

120 名前:108 [2009/07/21(火) 19:24:43 ]
>>109,>>111
ヒントをどうもありがとうございます。
ただ、&の意味がわからないのですが、どういうことでしょうか?
$だと固定だから&にしろということでしょうか・・・?
無知ですいません。

121 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 19:30:31 ]
>>120
"$G$" & i

&は文字列の結合

122 名前:108 [2009/07/21(火) 21:36:02 ]
>>121
無事プログラムがうまく動きました!
どうもありがとうございます!

123 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 21:38:52 ]
Dim 日数 As Integer
Dim 本日 As Date

本日 = Date
日数 = DateDiff("d", "2009/7/10", "本日")

とやったところ、型が一致しませんとでます。
本日までの日数を求めたいのですがどうすればいいのでしょうか?

124 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 21:44:33 ]
Excel立ち上げず書いてるからおかしかったら突っ込みよろしく


>>117
sub オートフィルタを使った方法()
Dim 元シート as WorkSheet,作業シート as WorkSheet
Set 元シート=ActiveSheet
元シート.Copy
Set 作業シート=ActiveSheet
作業シート.Range("C1").AutoFilter 1,"<>""*abc*"""
作業シート.Cells.SpecialCells(xlCellTypeVisible).Copy 元シート.Cells.
作業シート.Parent.Close False
End sub

125 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 21:47:28 ]
>>123
"本日" w



126 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 21:47:51 ]
>>123
変数の本日にはダブルクォーテーションいらんよ
「本日」という文字列は計算できんじゃろ

127 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 22:08:31 ]
125に代わっていうと

日数 = DateDiff("d", "2009/7/10", "本日")

日数 = DateDiff("d", "2009/7/10", Now)
日数 = DateDiff("d", "2009/7/10", Date)

128 名前:124 mailto:sage [2009/07/21(火) 22:12:34 ]
あっコピー先の最後の「.」はいらんわな
あとクライテリアの*abc*を囲う必要があったかなかったか自信ない

129 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 22:37:38 ]
>>116
けつからやんのか。頭良いな。


130 名前:123 mailto:sage [2009/07/21(火) 22:40:21 ]
レスありがとうございます。
無事できました。>>127さんのようにしました。

131 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 00:02:50 ]
>>129

基本中の基本。
君の頭が○○なだけです。

132 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 00:21:45 ]
こんなんピボットでやれば一発だわwwwww

133 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 01:32:28 ]
>>131
おまえにいってねえからwww

134 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 18:03:46 ]
また堕ちるぞ

135 名前:デフォルトの名無しさん mailto:sage [2009/07/22(水) 23:04:58 ]
>>133

ワロスw



136 名前:デフォルトの名無しさん [2009/07/23(木) 00:42:00 ]
現在Excelで作ったxmlを特定のURLへ送信するプログラムを作成しています。
(Microsoft XML version2.0使用)

Sub xml()
Dim aaa As Integer
aaa = "001"
Dim bbb As String
bbb = "001"

Dim xmlDoc As MSXML.DOMDocument
Dim xmlPI As IXMLDOMProcessingInstruction
Dim node(3) As IXMLDOMNode
Dim attr As MSXML.IXMLDOMAttribute

Set xmlDoc = New MSXML.DOMDocument

Set xmlPI = xmlDoc.appendChild(xmlDoc.createProcessingInstruction("xml", "version=""1.0"" encoding=""UTF-8"""))

Set node(1) = xmlDoc.appendChild(xmlDoc.createNode(NODE_ELEMENT, "TEST", ""))
Set node(2) = node(1).appendChild(xmlDoc.createNode(NODE_ELEMENT, "test1", "")): node(2).Text = aaa
Set node(2) = node(1).appendChild(xmlDoc.createNode(NODE_ELEMENT, "test2", "")): node(2).Text = bbb

'作成されたxml確認用
xmlDoc.Save ("test.txt")
End Sub


@set nodeに入れたaaaとbbbですが、1と表示されてしまいます。001と表示するにはどうしたら良いのでしょうか。
A作成された値(xml)を特定のURLへ送信したいのですが、どのライブラリ?等を利用すれば宜しいでしょうか
 (値を送ると、<result>NG</result>といった値が返却される予定です)

すみませんがお力添え頂けると幸いです。

137 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 02:07:25 ]
>>136
Excel 2007 + MSXML3 (MSXML2がなかった)とVBScript 5.0 + MSXML2 (Officeがなかった)の2環境でやってみたが、
いずれもbbbのほうは001になったぞ。

それをHTTPで送りたいのなら、MSXML.XMLHTTPRequestを使えばいい。

138 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 03:52:34 ]
変数についてなんですが、

-----------------------------------

Dim 値 As Integer

値 = Range("A1")   

Range("A1").FomulaR1C1 = "COUNTA(R[1]C[1],R[1]C[10])"    'A行
Range("A1").Copy
Range("A1").PasteSpecial (xlCellTypeValue)

Range("B1").Activate
Activecell,offeset(1,値).Select    'B行

---------------------------------------------------------

上記のようなコードで実行するとA行で集計されたはずの数値がB行に来た段階で代入されていないようなのですが、
変数というのは、宣言の時点で代入される数値が決まっていないといけないのでしょうか?


139 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 06:29:56 ]
Range("A1").FomulaR1C1 = "=COUNTA(R[1]C[1],R[1]C[10])"    'A行

いこーるつけなさい

140 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 07:47:58 ]
>>138
エスパーするとやりたいのはこういうこと?
Dim 値 As Integer
値 = WorksheetFnction.CountA(Range("B2:K2"))
Range("B1").Offeset(1,値).Select


質問に直接答えれば宣言はいつしてもいいけど変数の使い方がおかしい
Integer→Rangeに変えてSet 値 = Range("A1")
最後の行をActiveCell..Offeset(1,値.Value).Select

141 名前:デフォルトの名無しさん [2009/07/23(木) 18:06:57 ]
>>138
Activecell,offeset(1,値).Select    'B行
      ↑
点の種類間違ってる
最後の行はたぶんoffeset→offset

クライマックスの2行まとめて
Cells(2,2+値).Select 'ともかけるます

>>140

変数の使い方はあってない?

Range("A1")
を取得すると
Range("A1").Value
を返すしIntegerで足りるし
値.Copy とかやるでもないし

142 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 18:36:20 ]
Excel2007です。

赤丸(背景色は透明)を作りたいのですが、背景色を透明にできません。
Shape.Line.BackColorの編集でできそうなのですが、検索方法が悪いのか見つかりません。(この予測は間違いですか?)

 Dim myShape As Shape

 With ThisWorkbook.Worksheets("Sheet1")
  Set addCell = .Cells(intRow, intCol)

  Set myShape = .Shapes.AddShape(msoShapeOval, addCell.Left, addCell.Top, addCell.Width, addCell.Height)

  myShape.Line.ForeColor.RGB = RGB(255, 0, 0)
  myShape.Line.Weight = 2
 End With

よろしくお願いいたします。

143 名前:デフォルトの名無しさん [2009/07/23(木) 18:48:15 ]
>>142
myShape.Fill.Visible = msoFalse

144 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 19:52:54 ]
>>143
無事、透明になりました。ありがとうございます。

145 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 22:14:47 ]
>>141
あっ、そういう風に見れば
間違ってるのは変数「値」にA1の値を代入するタイミングだな



146 名前:デフォルトの名無しさん mailto:sage [2009/07/23(木) 23:31:01 ]
>>137
ありがとうございます!

147 名前:デフォルトの名無しさん [2009/07/25(土) 12:07:00 ]
エクセル2000を使用しています。

コンボボックス2個、テキストボックス1個、コマンドボタンのユーザーフォームで
シートに以下の図のようにデータがあります。
コンボボックス1にA列の値、コンボボックス2にB列の値を入れて、
コマンドボタンを実行すると、該当するC列の値をテキストボックスに表示する
にはどうすればいいですか?

A  B C
1 ああ  カカ  100
2 ああ  キキ  200
3 ああ  クク  300
4 いい  ケケ  400
5 いい  ココ  500

コンボボックス1に「ああ」、コンボボックス2に「クク」なら
テキストボックスは「300」になるようにしたいです。

よろしくお願いします。

148 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 12:24:06 ]
曖昧だな

149 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 12:35:45 ]
1とA、2とBの合致をANDでもいいから組み合わせて、そのセルを変数に格納して、テキストボックス=セル(変数、3).バリューすればいいかも!

150 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 12:44:08 ]
vbaが体系的に勉強できるサイトや本でおすすめあれば教えてください。

151 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 12:48:49 ]
>>150
ここでROMがお奨め(;゚д゚)ァ


152 名前:デフォルトの名無しさん [2009/07/25(土) 13:27:13 ]
項目1, 項目2, 項目3, 項目4, 項目n・・・(最大:n=255)
あああ, ううう, えええ, くくく, ・・・
いいい,    , おおお, けけけ, ・・・
   ,    , かかか,    , ・・・
   ,    , ききき,    , ・・・

(最大:行=65535)

とあった場合、

項目1, 項目2, 項目3, 項目4・・・
あああ, ううう, えええ, くくく
いいい, ううう, おおお, くくく
あああ, ううう, かかか, くくく
いいい, ううう, ききき, くくく
あああ, ううう, えええ, けけけ
いいい, ううう, おおお, けけけ
あああ, ううう, かかか, けけけ
いいい, ううう, ききき, けけけ
 ・
 ・
 ・

のように、データを詰めて別のシートの同じ位置(例:A1)から出力したいです。
※行・列は可変データです。

153 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 13:29:47 ]
>>150
151もおすすめだけど「体系的」ではないわなw
確かスレ違いだったと思うから紹介はしないが適当にググればいくつか出てくるからサイトさがしはそんなに難しくない

本買うなら最初はあまり分厚いのでなくて初心者向けの簡単な入門書やってみれば
自分が身につけたいことが見えてきて次に本買うときは自分の好みに合った本選びできる

154 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 13:37:24 ]
>150
excel vba 入門 に一致する日本語のページ 約 183,000 件中 1 - 10 件目 (0.35 秒)


155 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 13:39:59 ]
>>152
これって
丸投げというか、依頼じゃね
何がわからないか書かないと答えられないだろ



156 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 13:45:47 ]
>>152
nhngdおk

157 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 13:59:52 ]
>152
この例だとfor〜nextループ4重で行数は2×1×4×2=16行。
組み合わせの問題で項目数が不定ということは再帰処理ができるとわかりやすいんだろうけど・・・・
「excel vba 再帰」でググったら再帰プログラムができるらしい。

ひとつ間違えると無限ループになるし、項目数最大256個が大丈夫なのか、やってみないと
なんともいえない。


158 名前:157 mailto:sage [2009/07/25(土) 17:28:56 ]
>152
行基準(再帰処理)でやろうとしたら、こんがらがってしまい中断。列基準だとなんかできそう。

先に列数(4)と、列毎の行数を調べ、配列に設定。この際添え字は0〜列数+1とし、
配列(0)と配列(列数+1)の内容は1にしておく。
その結果、配列(0)=1、配列(1)=2、配列(2)=1、配列(3)=4、配列(4)=2、配列(5)=1 となる。

左端列(A列:列番号1)は当該列の要素("あああ"、"いいい"の2種類をそれぞれ左側の組み合
わせ数1回繰り返したものを右側の組み合わせ数(1×4×2=)8回出力する。
→あああ、いいい を8回
B列(列番号2)は当該列の要素("ううう")の1種類をそれぞれ左側の組み合わせ数2回繰り返した
ものを、右側の組み合わせ数(1×4×2=)8回出力する。
→ううう、ううう を8回
C列(列番号3)は当該列の要素("えええ"、"おおお"、"かかか"、"ききき")の4種類をそれぞれ
左側の組み合わせ数2回繰り返したものを、右側の組み合わせ数2回出力する。
→(えええ を2回、おおお を2回、かかか を2回、ききき を2回)を2回
D列(列番号4)は当該列の要素("くくく"、"けけけ")の2種類をそれぞれ左側の組み合わせ数
8回繰り返したものを、右側の組み合わせ数1回出力する。
→くくく を8回、けけけ を8回

列数がNで、n列目の出力を考えた場合、
要素数は 配列(n)
左側の組み合わせ数は 配列(0)×配列(1)×・・・×配列(n−1)
A列の場合も配列(0)=1があるので計算に支障なし
右側の組み合わせ数は 配列(n+1)×・・・配列(N−1)×配列(N)
最右列の場合も配列(N+1)=1があるので計算に支障なし

159 名前:157 mailto:sage [2009/07/25(土) 17:35:38 ]
>158の続き

>152の例だと「項目3」が えええ、おおお、かかか、ききき、えええ、・・・という
順番だけど、えええ、えええ、おおお、おおお、かかか、かかか、ききき、ききき・・・の
並びの方が組み合わせ順としては自然だと思う。項目4も同様に同じものが8回ずつ繰り返す
ことになります。

>152 ここまで示したらできますか?

160 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 18:55:00 ]
よくわからないけど、列ごとにソートしたいのか?
格納用の配列(65534、254)を用意
ソート用の配列(65534、0)を用意
列をカウントする変数iを用意

for i=0to254
ソート用の配列に列データを格納、ソート
格納用の配列(65534、i)にソートしたデータを格納

最後にシートに格納した配列を流し込む

161 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 20:12:03 ]
>>152
死ぬほど遅いけどこういうことか?

Sub test()
For Each c In Range(Cells(1, 1), Cells(65535, 255))
If (c.Value = Empty And c.Rows > 1) Then
c.Value = c.Offset(-1, 0).Value
End If
Next
End Sub

162 名前:デフォルトの名無しさん mailto:sage [2009/07/25(土) 21:10:28 ]
>>152
1.まず、項目1...nの要素を数える
2.数えた要素を掛け算、K1xK2x...xKn
3.2.で得られた数値が必要な行数なので、
  各項目ごとに各要素で必要行数だけ埋める

163 名前:162 mailto:sage [2009/07/25(土) 21:13:15 ]
すまそ

2.数えた要素の、最小公倍数を求める

164 名前:162 mailto:sage [2009/07/25(土) 21:16:14 ]
すまそ

だれか、2.の正解を頼む

165 名前:162 mailto:sage [2009/07/25(土) 21:18:27 ]
ああ、最初の162で正解でした



166 名前:162 mailto:sage [2009/07/25(土) 21:22:58 ]
>>152
の質問で
あああ, ううう, おおお, くくく
の組み合わせが必要かどうかで答えが変わるね

スレよごし、すまそ

167 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 00:54:28 ]
環境
・WindowsVista
・Excel2002

A1〜A10の合計をC2に表示させるマクロを作りたいのですが上手くいきません。
自分で作ったのは以下の通りです。

Sub practice()
Dim i As Integer
For i = 1 To 10
Cells(2, 3) = Cells(i, 1) + Cells(i, 1) + Cells(i, 1) + Cells(i, 1) + Cells(i, 1) + Cells(i, 1) + Cells(i, 1) + Cells(i, 1) + Cells(i, 1) + Cells(i, 1)

Next i
End Sub

アドバイスを頂けると助かります。
よろしくお願いします。



168 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 01:01:07 ]
どううまく動かないか説明もせずにアドバイスとな

169 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 01:12:49 ]
説明不足で申し訳ありません。

上手くいかないというのは合計の値がオートSUMで計算した合計と一致しないということです。



170 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 01:21:21 ]
やりたいことはコレか?

Sub practice()
Dim i As Integer
Dim sum as Integer
sum = 0
For i = 1 To 10
sum = sum + Cells(i, 1)
Next i
Cells(2, 3) = sum
End Sub

171 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 01:26:42 ]
>>167
元マクロ無視して書けばこういうこと?

Sub practice()
range("c2") = worksheetfunction.sum(range("a1:a10"))
End Sub

172 名前:167 mailto:sage [2009/07/26(日) 01:28:41 ]
>>170
値が一致しました。ありがとうございました。


173 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 03:50:40 ]
どうせ小数をintegerで計算したってオチだろ

174 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 08:32:13 ]
セルを各々9回余分に加算してたんだろ

175 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 09:25:18 ]
動かないとかエラーが出てるとか書く時はどう望んだ風に動かないとかどんなエラーメッセージが出てるとか書け

>>1に書いたとしても、読みもしないんだろうなぁ。



176 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 09:33:22 ]
エスパーだけどループ処理を使ってSUMさせる課題か何かだな

177 名前:デフォルトの名無しさん [2009/07/26(日) 13:48:35 ]
よろしくお願いしますm(__)m

Excelで店舗の営業日報を作れるデータを作成しました。
他人がそのデータを使うワケなのですが、

データに打ち込んで、上書き保存などはできるが、
データそのものを複製やコピーする事を防止する事は可能ですか?

また、暗証番号機能などで、その複製のロックを管理する事は可能でしょうか?
あるとすればどのような手段でデータをその人に預ければよいのでしょうか。

わかりずらいかも知れませんが
よろしくお願いしますm(__)m



178 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 14:00:33 ]
>>177
マルチ 芯でください

179 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 16:08:32 ]
できる

で、マルチならどこなのか晴れYO

180 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 16:09:31 ]
54 :名無しさん@そうだ選挙にいこう :2009/07/26(日) 13:28:31
よろしくお願いしますm(__)m

Excelで店舗の営業日報を作れるデータを作成しました。
他人がそのデータを使うワケなのですが、

データに打ち込んで、上書き保存などはできるが、
データそのものを複製やコピーする事を防止する事は可能ですか?

また、暗証番号機能などで、その複製のロックを管理する事は可能でしょうか?
あるとすればどのような手段でデータをその人に預ければよいのでしょうか。

わかりずらいかも知れませんが
よろしくお願いしますm(__)m

181 名前:デフォルトの名無しさん [2009/07/26(日) 17:25:08 ]
自分>>177です。

マルチとは
『他でも質問してる』
って意味なのですね。

すみませんm(__)m
ドコで質問すればベストか、また、
色んな人に聞けばもしかしたら、と思い書き込みしてしまいましたm(__)m

ご迷惑おかけしましたm(__)m

さしつかえ無ければ>>179さん、簡単にでも教えていただけませんでしょうか?
よろしくお願いしますm(__)m

182 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 17:29:37 ]

女子大生or女子高生なら、即解決w



183 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 17:53:50 ]
☆質問例☆

Excelで店舗の営業日報を作れるデータを作成しました。
他人がそのデータを使うワケなのですが、

都内の中学校にかよう15歳の女子中学中学生ですが、最近中学1年の妹の胸が大きくなってきて困ります。
まだ中学生なのに私よりも膨らみが目立っているのが少し悲しいです。

一緒にお風呂に入るとよくわかります。
妹は私の気持ちに気がつくどころか、ことあるごとにさわったりもんだりしてくるのです・・・。

データに打ち込んで、上書き保存などはできるが、
データそのものを複製やコピーする事を防止する事は可能ですか?

また、暗証番号機能などで、その複製のロックを管理する事は可能でしょうか?
あるとすればどのような手段でデータをその人に預ければよいのでしょうか。

今日もスポーツブラの下から手を入れてきて、声を堪えるのに大変でした。

わかりずらいかも知れませんが
よろしくお願いしますm(__)m

184 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 18:13:54 ]
俺は貧乳でもOKだよ。

185 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 22:33:47 ]
XP,OFFICE 2007
初心者&初カキコです。
いきなりすみません。
配列変数 A(3,100)があるとして、
A(2,0)〜A(2,100)や、A(3,0)〜A(3,100)といった各一次元配列の平均をそれぞれ出したいのですが、
全ての平均を出す場合は
.Average(A)
ですが、各次元毎だと、方法が解りません。
どなたか指導をお願いします。




186 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 22:48:03 ]
環境
・WindowsVista
・Excel2007

SheetAに貼った画像の中から選択したものを一つSheetBに貼りたいんですが
どうすればいいですか?



187 名前:デフォルトの名無しさん mailto:sage [2009/07/26(日) 22:58:51 ]
>186
マクロの自動記録は試してみましたか?
当方Excel2003ですが、自動記録してできたソースの1〜2行コメント化するだけで、できましたよ。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<149KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef