• ベストアンサー

エクセルの計算処理について

 いつもお世話になっております。  エクセルの計算処理について質問させていただきます。  下図にもございますが、A列に数値があれば(A17)、次の数値(A34)がくるまでは、F列におきまして、最初の数値のみをG列に移したいのですが(F24からG24、さらには、F35からG35)、どのようにすればよろしいでしょうか?  できましたならば、マクロを用いた方法をご教示いただければ、幸甚に存じます。  それでは、よろしくお願い申し上げます。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.4

No.3 です。すみません、カウンターを 2 つ用意する必要が全くありませんでした。なので一応、減らした修正版を掲載します。まあ修正前のコードでも、別に誤った結果が出るということではないのですが、意味がないので。 Option Explicit Sub Macro1()   Dim i As Long, cnt As Long   For i = 1 To 1000  '処理の開始行と終了行の行番号を指定     If Cells(i, "a").Value <> "" Then       cnt = 0     End If     If Cells(i, "f").Value <> "" Then       cnt = cnt + 1       If cnt = 1 Then         Cells(i, "g").Value = Cells(i, "f").Value       End If     End If   Next End Sub

nyan_nyanko
質問者

お礼

 どうもありがとうございました。  確認のため、実際テストしてみましたが、バッチリでした。  感謝です!

その他の回答 (4)

  • okormazd
  • ベストアンサー率50% (1224/2412)
回答No.5

Sub test() Dim r As Integer, rmax As Integer, c As Range rmax = Range("C" & Rows.Count).End(xlUp).Row   'データ範囲の最大行取得   For Each c In Range("A1:A" & rmax)      'A1から検索しているが検索範囲は適宜     If c.Value <> "" Then             'A列のデータ範囲で、空白じゃないセルを検索       r = c.Row                  'その行を取得       While Range("F" & r).Value = ""    'その行以下でF列の空白でないセルを検索         r = r + 1       Wend       Range("G" & r) = Range("F" & r)   '最初に見つかったF列の空白でないデータをG列の同じ行に書き込み     End If   Next End Sub 必ずデータがあるとして処理しているので、データがなければ予期せぬ結果になるかもしれないが、それには対応していない。適宜修正をしてください。

nyan_nyanko
質問者

お礼

 どうもありがとうございました。  わかりやく、説明をも加えていただきましたこと、厚くお礼申し上げます。

回答No.3

VBA は大して得意じゃないですが。まあ地道に。 Option Explicit Sub Macro1()   Dim i As Long, c1 As Long, c2 As Long   For i = 1 To 1000  '処理の開始行と終了行の行番号を指定     If Cells(i, "a").Value <> "" Then       c1 = c1 + 1       c2 = 0     End If     If Cells(i, "f").Value <> "" Then       c2 = c2 + 1       If c2 = 1 Then         Cells(i, "g").Value = Cells(i, "f").Value       End If     End If   Next End Sub

nyan_nyanko
質問者

お礼

 迅速なご対応、どうもありがとうございました。  厚くお礼申し上げます。

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.2

回答No1です。 次のような式がベターでしょう。 =IF(F2="","",IF(COUNT(INDEX(F$2:F2,MATCH(10^10,A$2:A2)):F2)=1,F2,"")) A17セルから下行が対象ならG17セルには次の式を入力して下方にドラッグコピーします。 =IF(F17="","",IF(COUNT(INDEX(F$17:F17,MATCH(10^10,A$17:A17)):F17)=1,F17,""))

nyan_nyanko
質問者

お礼

 どうもありがとうございました。  とても勉強になりました。  厚くお礼申し上げます。

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.1

例えばで表が2行目から下方にあるとしたらG2セルには次の式を入力して下方にドラッグコピーします。 =IF(F2="","",IF(COUNT(INDEX(F:F,MATCH(10^10,A$2:A2)):F2)=1,F2,"")) A17セルから下行が対象ならG17セルには次の式を入力して下方にドラッグコピーします。 =IF(F17="","",IF(COUNT(INDEX(F:F,MATCH(10^10,A$17:A17)):F17)=1,F17,""))

nyan_nyanko
質問者

お礼

 どうもありがとうございました。  とても勉強になりました。  感謝です。

関連するQ&A