【正答100P】Excel2000、又はOpenOffice.org Calc(最新)で自動処理:


基本的に、列AとBに整数が入っています。

ただし、行によっては、列Aのセルだけ、又は列A・Bとも、
内容が、文字「-」(半角ハイフン)である場合があります。

この場合に、次の処理を一括で行なう方法を教えてください。

「もし、ある行の列Aが数値だったら、その行ではなにもしない。
もし、ある行の列Aが「-」だったら、
その行の列B(=その右のセル)に入っている数値(上記の通りそのセルも「-」の場合もあります)
を2で割った数値を、列Aの「-」に上書き代入する。
もし、列A・Bとも「-」だったら、その行はなにもしないか、どのような処理になっても良い。」

エクセル2000でも、オープンオフィスオーグカルクでも、どちらでも結構です。なるべく具体的に教えてください。

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2010/12/14 14:02:33
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:taknt No.1

回答回数13539ベストアンサー獲得回数1198

ポイント100pt
Sub main()
For a = 1 To 65536
    If Cells(a, "A") = "" Then Exit For

    If Cells(a, "A") = "-" Then
        If Cells(a, "B") <> "-" Then
            Cells(a, "A") = Cells(a, "B") / 2
        End If
    End If
Next a
End Sub

自動化ということで ExcelのVBAです。

というか質問の内容は VBAでしか実現できないと思います。

列A・Bとも「-」の時は何もしません。

id:akkeyyyy

ありがとうございます。

2010/12/14 14:02:14

その他の回答2件)

id:taknt No.1

回答回数13539ベストアンサー獲得回数1198ここでベストアンサー

ポイント100pt
Sub main()
For a = 1 To 65536
    If Cells(a, "A") = "" Then Exit For

    If Cells(a, "A") = "-" Then
        If Cells(a, "B") <> "-" Then
            Cells(a, "A") = Cells(a, "B") / 2
        End If
    End If
Next a
End Sub

自動化ということで ExcelのVBAです。

というか質問の内容は VBAでしか実現できないと思います。

列A・Bとも「-」の時は何もしません。

id:akkeyyyy

ありがとうございます。

2010/12/14 14:02:14
id:SALINGER No.2

回答回数3454ベストアンサー獲得回数969

ポイント100pt

まず実現方法として、A列のセルを上書きするということでワークシート関数ではできないのでマクロを使うことになります。


Excelの場合マクロは次のように標準モジュールを追加してそこに書き込みます。

http://www.officepro.jp/excelvba/ini/index1.html

http://www.officepro.jp/excelvba/ini/index2.html

http://www.officepro.jp/excelvba/ini/index3.html


書きこむコードはこちらです。そのままコピペしてください。

Sub Macro()
    Dim lastRow As Long
    Dim i As Long
    
    lastRow = Cells(Rows.Count, "A").End(xlUp).Row
    For i = 1 To lastRow
        If Cells(i, "A").Value = "-" And IsNumeric(Cells(i, "B").Value) Then
            Cells(i, "A").Value = Cells(i, "B").Value / 2
        End If
    Next i
End Sub

コードの説明

A列の最終列(lastRow)を求めて、ループさせて行ごとに処理する簡単なコードです。

条件は処理しやすいように次のように変換しました。

「A列が-でB列が数値ならば、A列にB列の1/2を書きこむ」

これでA列が空白だったり、B列が文字列だったりというイレギュラーも回避できます。

id:akkeyyyy

ありがとうございます。

2010/12/14 14:02:12
id:kimuram No.3

回答回数27ベストアンサー獲得回数11

ポイント100pt

Excelです。(Excelのどのバージョンでも可能です。)

セルの内容を書き換えることなので、ここではVBAを使用して直接にセル内容を書き換えする方法を考えましょう。

まず処理対象はA列ですが、2行目から処理を始め、セルが空(ヌル)となったところでデータ終わりで処理終了とします。

(多分1行目は見出し文字列があると思います。開始行が異なる場合は初期値設定でセットする値を変えればいいです。)

下のマクロをVBAモジュールに貼り付けで組み込み、対象データのワークシートを表示している状態でこのマクロを起動します。

Sub colA_Change()

'

Dim wkRow As Integer 'データ処理行

wkRow = 2 'データ処理行初期値設定

'A列のデータが無くなる行まで繰り返す

While Cells(wkRow, 1) <> ""

'

If Cells(wkRow, 1) = "-" Then

'A列がハイフンの場合

If Cells(wkRow, 2) = "-" Then

'B列もハイフンなので処理しない

Else

'B列がハイフンでないのでこれを2で割った値をA列にセットする

Cells(wkRow, 1) = Cells(wkRow, 2) / 2

End If

else

'A列がハイフンでない(数字が入っている)場合は何もしない

End If

'次の行に進める

wkRow = wkRow + 1

Wend

End Sub

id:akkeyyyy

ありがとうございます。

2010/12/14 14:02:09

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません