人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

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

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

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

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

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


●質問者: ak2ey4
●カテゴリ:コンピュータ 学習・教育
✍キーワード:Calc OpenOffice.org なう エクセル オープンオフィス
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● きゃづみぃ
●100ポイント ベストアンサー
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とも「-」の時は何もしません。

◎質問者からの返答

ありがとうございます。


2 ● SALINGER
●100ポイント

まず実現方法として、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列が文字列だったりというイレギュラーも回避できます。

◎質問者からの返答

ありがとうございます。


3 ● kimuram
●100ポイント

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

◎質問者からの返答

ありがとうございます。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ