- ベストアンサー
Join関数 引数の配列変数
複数行1列のセルの文字を結合してアクティブセルにセットしようとするとき、以下のステートメントでは (2)でエラーになります。 Join関数ではabが1次元配列でないとエラーですが、(1)で生成されるabは1次元配列にならないのでしょうか? または、それ以外の理由でエラーになるのでしょうか? ご教授を、よろしくお願いいたします。 Public Sub セル文字の結合() Dim ab As Variant ab = Range(Selection.Address).Value ・・・(1) ActiveCell.Value = Join(ab, "") ・・・(2) ・・・・
- みんなの回答 (2)
- 専門家の回答
関連するQ&A
- 配列変数 インデックス番号の最小値
特に指定しない場合、配列変数のインデックス番号の最小値は0から始まるはずですが、下記のプロシージャでは、abの最小インデックス番号は1,2次元とも「0」でなく「1」から始まります(ウォッチ式で見ても「1」から始まっています)。 「0」から始まらない理由が分かりません。 ご教授を よろしくお願いいたします。 Public Sub セル参照() ' "A1:B10"のセル範囲のデータを順番にメッセージボックスに表示する。 Dim ab As Variant Dim i As Integer, j As Integer ab = Worksheets("Sheet1").Range("A1:B10").Value For i = 1 To UBound(ab, 1) For j = 1 To UBound(ab, 2) MsgBox ab(i, j) Next j Next i End Sub
- 締切済み
- Visual Basic
- join関数で文字列を''で括りたい
いつもお世話になっております。 SQLのQueryを生成するため、 配列をjoinしようと思ってます。 joinの値は文字列なので、シングルクオーテーションで括りたいと考えてるのですが、 うまい方法を探しております。 ご存知なら御教授いただきたいです。 今はjoinの配列にデータを入れる際にシングルクオーテーションを文字列結合しております。
- 締切済み
- PHP
- rangeに変数代入でエラー
VBA初心者です。お願いします。 下記のように最終セルのアドレスを取得し、セル範囲を選択したいのですがたのですが、エラーが出てしまいます。どなたか助けてください。 ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Activate l = ActiveCell.Column 'アクティブセルの列番号 d = ActiveCell.Row 'アクティブセルの行番号 ad = ActiveCell.Address 'アクティブセルのアドレス Range("A1:ad").Select
- 締切済み
- Visual Basic
- Excelマクロ:変数でセル範囲指定
マクロの迷い人です。 Excelの表をマクロで印刷しようと思っています。 行の数が毎回違うため、最終セルもその都度指定しなければなりません。 A1 B1 A2 B2 A3 B3 A4 B4 この例で、A5 B5 以降は空セルとします。 印刷範囲を Range("A1:B4")と書かずに、そのときどきのアクティブセルを変数に代入し、変数を使って範囲指定したいのです。 Sub MacroTest () Dim a As Variant Dim b As Variant Range("B1").Activate Do While a <> 0 ActiveCell.Offset(1, 0).Activate '空白でなければ一つ下に移る a = ActiveCell.Value Loop ActiveCell.Offset(-1, 0).Activate '上の行に移る b = ActiveCell.Value Range("A1:"& b).Select End Sub こうしてみましたがダメでした。 デバッグの方法がわからないので教えて下さい。よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- セル解除後、各行に値をコピーし結合するマクロ
A1からC3のセルが結合しており、 そのセル結合を解除すると、A列のみ値がコピーされる。 コピーした後、各行ごとにセルを結合していく…… という処理をしたいと思い、 調べて下記のマクロまでなんとかこぎつけました。 Sub セル結合() Dim date1 As Variant Dim range1 As Range Application.DisplayAlerts = False For Each range1 In Selection.Rows If range1(1).MergeCells = False Then range1(1).Merge Else date1 = Selection.Rows(1).Value With range1 .UnMerge .WrapText = False .ShrinkToFit = False Selection.Value = date1 End With End If Next range1 End Sub ※実行範囲に関しては、 任意選択をした範囲にしたいため、 range(1)にて処理を行いました。 困っているのは、上記のマクロを実行すると、 最初の行のみ結合できないということ。 もうひとつが、 セル結合をしない時に値を左端にコピーすると、 文字が自動縮小されてしまいます。 縮小しないようにするには、 どのような処理を入れたら良いでしょうか? お力添え頂けますと幸いです。 よろしくおねがいします。
- ベストアンサー
- オフィス系ソフト
- C#で、引数における一次元と二次元配列の取り扱い
C#について質問させていただきます。 以下のようにすればそれぞれ一次元配列と二次元配列を格納出来ますが 同時に一つの引数に収めることは無理なのでしょうか? public static void Join(string[] Ary_str){ 本文 } public static void Join(string[ , ] Ary_str){ 本文 } そのために、例えば以下のようにしたとします。 public static void Join(object Ary_obj){ 本文 } こうすれば一次元でも二次元でも格納出来ますが 格納された値が何次元配列なのか確認するために Ary_obj.Rank としてもエラーになってしまいます。 (1)Objectに格納した値が何次元配列なのか確認する方法か (2)一次元でも二次元でも格納できる引数の指定方法 をご存じの方、ぜひお教え願います。><
- ベストアンサー
- C・C++・C#
- Excelのセルから配列変数への一括読込み
VB(というかプログラミング)の超初心者です。 Excelシートの任意の領域にある数値を、配列変数に一括して 入力したいと思っています。 これまで、 Dim XXX(10) As Variant For I = 1 To 10 XXX(I - 1) = Cells(1, I).Value Next I Range(Cells(10, 1), Cells(10, 10)).Value = XXX の様な感じで処理していましたが(最近まで、セルへの書込みも For-Nextで処理していました)、データ数が多くなると処理に 時間がかかってしまいます。 配列YYYへの読込みもセルへの書込みの様に一括して行うには どうすれば良いでしょうか? よろしくお願いします。
- ベストアンサー
- Visual Basic
- エクセル cellから配列への取り込み
お世話になります。 環境は、WindowsXpSp3、VB6sp6、MS-excel2003です。 処理内容は「エクセルのセル情報を元に条件判定を行い、結果を出力する」ものです。 現状、cellsオブジェクトの値と色からAND判定を行っています。 cells(r,c).value cells(r,c).Interior.ColorIndex 色々と調べたところ、配列にすると「劇的に速くなる」ということがわかりました。 想像してみて「確かに」と思い、試してみたところ、range().valueとvariant配列で試したところ約30倍の速度になりました。 (この時はvalueのみで試しました。) 「色情報もインデックスだから・・・」と思い、合わせて試してみました。 しかし、セルの色情報となると、これを配列にすることができません。 エクセルの仕様上どうにもならないものなのでしょうか。 もし「裏技」的なものがあればお願いします。 欲しい情報はcellのvalueとColorIndexが対応した配列です。 ソースは関連する部分だけ書きました。 -------------------------------------- Dim varValueRange As Variant Dim varColorRange As Variant varValueRange = Range(Cells(1, 1), Cells(10000,1)).Value varColorRange = Range(Cells(1,1),Cells(10000,1)).Interior.ColorIndex -------------------------------------- varValueRangeの方は問題なく配列になります。 varColorRangeがNullになってしまい、配列になりません。
- 締切済み
- Visual Basic
- マクロよ動け
VBA 難民です。 Excel で、左のセルが空白の場合、印刷文字を見えなくするつもりのマクロを作ってみましたが、知らん顔をされます。声の掛け方がまだよくわかってないのです。 こっちを向かせる方法を教えて下さい。よろしくお願いします。 Sub MacroWhiter() Dim a As Variant Dim b As Variant a = ActiveCell.Value b = ActiveCell.Offset(0, -1).Value '一つ左のセルの値 Range("B1").Activate 'ここから始める Do Until IsEmpty(ActiveCell.Value) '空きセルまで続ける If b = 0 Then 'ゼロの場合 ActiveCell.Font.Color = 2 '文字を白色にする ActiveCell.Offset(1, 0).Activate '下の行に移る End If Exit Do Loop '繰り返す a = ActiveCell.Value
- ベストアンサー
- オフィス系ソフト
- VBA セル範囲をVariant変数に代入
Dim myVar As Variant myVar=Range("A1:A10") などのようにセル範囲を変数に一気に入力して使う際、myVarは2次元配列になる筈です。セル数が1個だけの時は、ひょっとしてただの変数つまり配列にならないのですか?確信ありませんが、そう思えるエラーがありました。 気のせいならこのまま粛々とエラー対策を続けます。本当だったら、データ数で変数の型が変わるので都合が悪いです。どう対策すればいいですか?
- ベストアンサー
- Excel(エクセル)
補足
ご教授を ありがとうございます。 以下のステートメントで、アクティブシートの任意のセルの文字列を結合してアクティブセルにセットできると思います。 (但し、選択セルが複数行1列か1行複数列限定です:それ以外はエラーとなります) ----------------------------- Public Sub セル文字列の結合() Dim ab As Variant On Error GoTo errMSG If Selection.Columns.Count = 1 Then '複数行1列の場合 ab = Range(Selection.Address).Value ActiveCell.Value = Join(WorksheetFunction.Transpose(ab), "") For Each ab In Selection If ab.Address <> ActiveCell.Address Then ab.ClearContents Next ElseIf Selection.Rows.Count = 1 Then '1行複数列の場合 ab = Range(Selection.Address).Value ab = WorksheetFunction.Transpose(ab) ActiveCell.Value = Join(WorksheetFunction.Transpose(ab), "") For Each ab In Selection 'アクティブセル以外はクリアする If ab.Address <> ActiveCell.Address Then ab.ClearContents Next Else MsgBox "選択範囲エラーです。複数行1列または1行複数列 限定です。", vbOKOnly + vbCritical End If Exit Sub errMSG: MsgBox "エラーが出ましたけど・・・", vbOKOnly End Sub