喫茶XRAYトップページ

[スレッド全体
]

[8288] エクセルは苦手返信 削除
2014/12/19 (金) 14:09:07 Mr.XRAY
例えばですよ.

(1) 特定の複数のセルが入力されている行
(2) 逆に,特定の複数のセルが全て空白である行

というのを検出するとします.
もちろん,Delphi 使いで,しかもエクセルの操作のプログラムを組んだ
ことがある方でしたら,なんとなく,ですよね.

これをエクセルそのもので操作するなると,
調べないと分かりませんね.
しかし,全くエクセルの初心者よりはましかも.

いえね,ここに書いたからって,別に教えてくれ,というわけではないです.
でも,教えてくださっても構いません.
お礼に,当サイトのサンプルプログラムの全てを無料でダウンロードする
権利を差し上げます (?)

一応ですね.Excel 2010 ということで.
やっば,マクロ使うのかな (独り言です)


[8291] Re:エクセルは苦手返信 削除
2014/12/19 (金) 16:53:51 まちだ
▼ Mr.XRAYさん
> (1) 特定の複数のセルが入力されている行
> (2) 逆に,特定の複数のセルが全て空白である行



これなら回答できます〜。(笑)

snailさんとは、別アプローチで
「データが連続して入っている(入っていない)最後のセルを求める」
ようなマクロを書いてみます。

Sub NullRow()

Dim iRow    As Integer
Dim iCol    As Integer

For iRow = 1 To 10
    iCol = Cells(iRow, 1).End(xlToRight).Column
    If iCol = 16384 And Cells(iRow, 1) = "" Then
        MsgBox ("Null行です")
    Else
        MsgBox ("データあり")
    End If
Next

End Sub

通常は

Range("A1").End(xlDown).Row

みたいな感じで、A列に連続して入力されているデータが
どこまであるか…なんてとります。

Whileループで回してもいいんだけど
毎行チェックするよりFor文の方が早いです。



[8292] Re2:エクセルは苦手返信 削除
2014/12/19 (金) 23:46:59 TS
▼ Mr.XRAYさん

>対象範囲のセルのデータまるごとバリアント配列に格納して処理しちゃうんだけど...
VBAでもバリアントの方が処理が早いそうです。
下記のコードは検証してません、と言うか違っていると思います。
とりあえずこんな感じという事で。

Function 空白セルのカウント(RangeA As Range)
 Dim C As Variant
 Dim i, j As Long
 C = RangeA.Value
 count = 0
 For i = 1 To RangeA.Rows.count
   For j = 1 To RangeA.Columns.count
     If C(i, j) = "" Then
       count = count + 1
     End If
   Next j
 Next i
 
空白セルのカウント = count
End Function


[8293] Re3:エクセルは苦手返信 削除
2014/12/20 (土) 07:02:56 Mr.XRAY
snailさん,まちださん,TSさん,ありがとうございます.
それにしてもスゴイですね,皆さん.

サイトにエクセル操作関係のサンプルをいっぱい掲載していますが,
これは,エクセルの操作なんです.
言い訳になってしまいますが,皆さんが教えてくれたコード,
つまり,マクロがあったとします.
それを Delphi から操作するというのはできるんです.

私の周囲にも,エクセルでデータベースもどきを作ってしまう人がいます.
ついて行かれません.

> 下記のコードは検証してません、と言うか違っていると思います。
> とりあえずこんな感じという事で。


いえいえ,これだけあれば十分です.
後は,質問してきた方に,マクロとか VBA を知っているとか,
操作できるのかを確認して,それなりの対応方法を考えます.
これを機会に,エクセルを少し勉強するつもり(?) になるかは分かりません.

# 自分で何にも調べないうちに,参考となるコード類が手に入るなんて
# こりゃたまらんですね.
# 掲示板でよく質問する方の気持ちが分かるような気がします(笑)


[▼次のスレッド]
INCM/CMT
Cyclamen v3.82