2016-04-04 10 views
1

私はLibreOffice Calcを使って16個のRGBカラー(B列の赤、Cの緑、Dの青)を保存しています。次に、それぞれの色で16個のセルの背景をペイントしたいと思います。各色は一列に並んでいます。BASICネストループ:ローをフィルタリングする

私はこれを部分的に達成することができました:16個の細胞だけでなく、48個(16x3)の細胞がペイントされました!ネストされたループを「グループ化」する必要があるようです。これは私のコード/マクロです:

function bgcolor() 

Dim Doc, Sheet, CellPaint As Object 
Dim CellR, CellG, CellB As String 

Doc = ThisComponent 
Sheet = Doc.Sheets.getByIndex(0) 

For i = 1 to 16 step 1 
    For j = 1 to 3 step 1 
     CellR = Sheet.getCellByPosition(j+0,i).getValue() 
     CellG = Sheet.getCellByPosition(j+1,i).getValue() 
     CellB = Sheet.getCellByPosition(j+2,i).getValue() 
     CellPaint = Sheet.getCellByPosition(j+6,i) 
     CellPaint.CellBackColor = RGB(CellR,CellG,CellB) 
    next j 
next i 

bgcolor=CellPaint.CellBackColor 

end function 

これが結果です: Screenshot

色の最初の列(H)はまさに、私が必要なものです。他の2つの列がそこに表示されます:どうすれば入れ子になったループを修正できますか?おそらく、単純なifステートメントを使用してそれらをフィルタリングする必要がありますが、わかりません。

EDIT - 参考:ソリューションは、しかし、私はそれがOpenOfficeの上のことはできません読んthis oneのようになります(私は、LibreOfficeの上でもないと仮定します)。

ありがとうございます!

答えて

2

ちょうど内側のループをドロップ - あなたが水平に反復する必要はありません。完璧に動作することを

function bgcolor() 

    Dim Doc, Sheet, CellPaint As Object 
    Dim CellR, CellG, CellB As String 

    Doc = ThisComponent 
    Sheet = Doc.Sheets.getByIndex(0) 

    For i = 1 to 16 step 1 
    CellR = Sheet.getCellByPosition(1,i).getValue() 
    CellG = Sheet.getCellByPosition(2,i).getValue() 
    CellB = Sheet.getCellByPosition(3,i).getValue() 
    CellPaint = Sheet.getCellByPosition(7,i) 
    CellPaint.CellBackColor = RGB(CellR,CellG,CellB) 
    next i 

    bgcolor=CellPaint.CellBackColor 

end function 
+0

!私はそれがとても簡単かもしれないとは思わなかった。どうもありがとう! – Gerard

関連する問題