VB2005環境にてFlexGridを使用しています。

ある列のセルの値が1になったら、その行の背景色を灰色にしたいと
思っているのですが、その方法についてご教授ください。

おそらくは値が変わった時に何かイベントを取得できると思うので、
その時に例えば左から2列めの該当セルが1にされたら、色を変える…
というような考え方で良いでしょうか?
ただ、それを実現するためのイベントが何か、また、行の値を
変える方法がわからず困っています。
(ROWプロパティでしょうか?)

申し訳ないのですが、サンプルコードを交えて教えていただけ
ないでしょうか?
よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

VB6の頃の FlexGridってことでしょうか?


セルのデータを変更しても それを検知できるイベントはありません
やるとすればEnterイベント(VB6風ならGotfocusイベント)やLeaveCellイベントで
カレントセルの列番号、値を調べて条件に一致したならCellBackColorで色を変更といった具合でしょう
LeaveCellイベントでやる場合は 再帰を不可にする工夫が必要です

  dim n as integer
' 元に戻すための色を設定
  dim cl as Drawing.Color = axMSFlexGrid1.BackColor
  if axMSFlexGrid1.Text = "1" then
    ' 希望の色に変更してください
    cl = Color.Red
  end if
  ' 左から2番目の列がカレントセルなら
  ' FixedColsを考慮したほうがいいでしょう
  if axMSFlexGrid1.Col = 1 then
    ' 行の先頭から末尾までセルの背景色を変更
    for n = axMSFlexGrid1.FixedCols to axMSFlexGrid1.Cols-1
      axMSFlexGrid1.CellBackColor = cl
    next
    ' 元選択されていた列に戻す
    axMSFlexGrid1.Col = 1
  end if

といった具合でしょう ...

行番号は Rowプロパティで取得できますよ
    • good
    • 0
この回答へのお礼

詳しいVerを書き忘れていました。
Flex Grid For.NET 3.0Jです。

しかし、redfox63さんの提示してくれたコードを参考に、
目的の動作を実現することができました。
ありがとうございました。

お礼日時:2007/08/05 09:19

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qエクセル たとえばA列の値が ○ と成った時 その行のB列のセルに斜め線を入れたいのです

  A    B
  ○   /(書式の罫線の斜線です)
  11       
  ○   /
  12

といった具合にするには どの様なコードを書けばよいのでしょうか
初心者で説明不足の段はお許しください
ご指南お願いいたします

Aベストアンサー

下記のコードを
Sheetのコードモジュールに書いてください。

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 Then
If Target.Value = "○" Then
With Cells(Target.Row, 2).Borders(xlDiagonalUp)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
End If
End If
End Sub

QA列にある文字データで△△を含むセルの値をB列に□□にして置き換えしたい

A列に文字データが100行まであります。
   A           B  
1 ミカンを食べた     ZZ
2 イチゴを食べた     XX
3 西瓜を食べた      YY
4 ミカンを捨てた     ZZ
5 西瓜を拾った      YY
6 ミカンを無くした    ZZ
7 西瓜を貰った      YY
8 イチゴをあげた     XX

それを表のようにB列(任意の列)に置き換えたいです。
イチゴを含むセルはB列にXXをミカンはZZみたいな感じです。
A列のセルには同じ文字列は(今のところ)含みません。
文字の一部を置き換えて変換し、それを繰り返すところまではできましたが、上記のことがができません。
VBAを使って一発で変換したいのですが教えていただけますでしょうか?

Aベストアンサー

こんな感じでよい?

Sub test()
Dim a
Dim b
Dim i, j
a = Array("ミカン", "イチゴ", "西瓜")
b = Array("ZZ", "XX", "YY")
For i = 0 To UBound(a)
For j = 1 To Cells(Rows.Count, 1).End(xlUp).Row
If InStr(Cells(j, 1).Value, a(i)) > 0 Then Cells(j, 2).Value = b(i)
Next j
Next i
End Sub

参考まで

QFlexGridで複数選択したセル、行、列を取得

VisualBasic5を使用しています。
フレキシブルグリッドコントロールについてですが、
複数の行や列やセルを選択したときにそれらの値を取得するプロパティとかって何かありませんか?
特に行について教えて欲しいのですが。

Aベストアンサー

こんにちは。maruru01です。

Row ・・・選択範囲の上端行番号
RowSel・・・選択範囲の下端行番号
Col ・・・選択範囲の上端列番号
ColSel・・・選択範囲の下端列番号

ちなみに値の取得は問題ないですが、値を設定する場合は、必ずRowとColを先に設定しなくてはなりません。
それは、RowとColを設定すると、自動的にRowSelとColSelにRowとColと同じ値が設定されるからです。
では。

Qエクセル A1の値と同じ値の入ったB列のC列の計

A1=10 D1=37
B C
10 15
11 10
10 12
12 1
10 10
A1と同じ値をB列から探し其の行のC列の値の合計をD1に表示したいのです
ご教授ください

Aベストアンサー

数式でやったほうが簡単ですが ・・・
=SUMIF(B1:B5,A1,C1:C5)
または
=SUMPRODUCT((B1:B5=A1)*1,C1:C5)

どうしてもVBAでというなら
標準モジュールに
Function mySum(rCnd as range, vSelect as variant, rSum as Range) as variant
  dim nCount as Long
  nCount = rCnd.rows.Count
  if nCount <> rSum.rows.Count then
    mySum = "---"
  else
    dim vC, vS
    dim n as Integer, value
    vC = rCnd.value
    vS = rSum.Value
    for n = 1 to nCount
      if vC(n,1) = vSelect then
        value = value + vS(n,1)
      end if
    next
    mySum = value
  end if
end Function
D1セルに =mySum(B1:B5, A1, C1:C5) といった数式を記述
といった具合です … 簡易なエラーチェックしかしていません

数式でやったほうが簡単ですが ・・・
=SUMIF(B1:B5,A1,C1:C5)
または
=SUMPRODUCT((B1:B5=A1)*1,C1:C5)

どうしてもVBAでというなら
標準モジュールに
Function mySum(rCnd as range, vSelect as variant, rSum as Range) as variant
  dim nCount as Long
  nCount = rCnd.rows.Count
  if nCount <> rSum.rows.Count then
    mySum = "---"
  else
    dim vC, vS
    dim n as Integer, value
    vC = rCnd.value
    vS = rSum.Value
    for n = 1 to n...続きを読む

Q列が対象のChangeイベントの入力セル選択

Private Sub Worksheet_Change(ByVal Target As Range)

Dim myrang As Range


'K列に入力した時
If Target.Column = 11 And Target.Count = 1 Then


With Workbooks("システム.xlsm").Worksheets("台帳").Columns(7)
Set myrang = .Find(what:=Target.Value, LookIn:=xlValues, lookat:=xlWhole, MatchCase:=False, matchbyte:=False, searchformat:=False)
End With


If myrang Is Nothing Then

Dim intret As Integer

      '☆
intret = MsgBox("入力エラーです!", vbCritical + vbOKOnly, "エラー発生")


Else

     処理2のコード

End If


Target.Offset(2, 0).Select

End If

    End sub

以上のコードがあります。
’☆のメッセージボックスを出し、OKを押したとき、入力したセルを選択して終了させたいのですが、
今のままでは、最後の
Target.Offset(2, 0).Select
を選択してしまいます。

どのようにすればいいのでしょうか?

Private Sub Worksheet_Change(ByVal Target As Range)

Dim myrang As Range


'K列に入力した時
If Target.Column = 11 And Target.Count = 1 Then


With Workbooks("システム.xlsm").Worksheets("台帳").Columns(7)
Set myrang = .Find(what:=Target.Value, LookIn:=xlValues, lookat:=xlWhole, MatchCase:=False, matchbyte:=False, searchformat:=False)
End With


If myrang Is Nothing Then

...続きを読む

Aベストアンサー

Dim x As Long
..と、変数1つ追加して

If myrang Is Nothing Then
  MsgBox "入力エラーです!", vbCritical + vbOKOnly, "エラー発生"
Else
  '処理2のコード
  x = 2
End If
Target.Offset(x, 0).Select

..という感じで"処理2"の時だけ Offset(2, 0) する、という考えで良いと思います。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報