Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Макрос преобразования формул в число - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: _Boroda_, китин  
Макрос преобразования формул в число
ГорЫнЫ4 Дата: Вторник, 19.09.2023, 16:15 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 7
Репутация: 0 ±
Замечаний: 20% ±

2019
Всех приветствую!
Подскажите пожалуйста, в макросах не силен.
Пример: https://docs.google.com/spreads....sharing
смысл такой: чтобы по условию в столбце А макрос преобразовывал в столбце В формулы в числа.
Если в ячейке А1:A установлено значение "1", тогда в соответствующей ячейке в столбце B1:B формулу преобразовать в число.
В примере есть макрос, который преобразует все формулы в столбце, где стоит курсор.
Подскажите пожалуйста как внедрить условие
благодарю
 
Ответить
СообщениеВсех приветствую!
Подскажите пожалуйста, в макросах не силен.
Пример: https://docs.google.com/spreads....sharing
смысл такой: чтобы по условию в столбце А макрос преобразовывал в столбце В формулы в числа.
Если в ячейке А1:A установлено значение "1", тогда в соответствующей ячейке в столбце B1:B формулу преобразовать в число.
В примере есть макрос, который преобразует все формулы в столбце, где стоит курсор.
Подскажите пожалуйста как внедрить условие
благодарю

Автор - ГорЫнЫ4
Дата добавления - 19.09.2023 в 16:15
ГорЫнЫ4 Дата: Среда, 20.09.2023, 16:38 | Сообщение № 2
Группа: Пользователи
Ранг: Прохожий
Сообщений: 7
Репутация: 0 ±
Замечаний: 20% ±

2019
Макрос который превращает все формулы в числа (где установлен курсор) такой:
[vba]
Код
function m1() {
var spreadsheet = SpreadsheetApp.getActive();
var currentCell = spreadsheet.getCurrentCell();
spreadsheet.getActiveRange().getDataRegion().activate();
currentCell.activateAsCurrentCell();
spreadsheet.getActiveRange().copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
};
[/vba]
 
Ответить
СообщениеМакрос который превращает все формулы в числа (где установлен курсор) такой:
[vba]
Код
function m1() {
var spreadsheet = SpreadsheetApp.getActive();
var currentCell = spreadsheet.getCurrentCell();
spreadsheet.getActiveRange().getDataRegion().activate();
currentCell.activateAsCurrentCell();
spreadsheet.getActiveRange().copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
};
[/vba]

Автор - ГорЫнЫ4
Дата добавления - 20.09.2023 в 16:38
ГорЫнЫ4 Дата: Среда, 20.09.2023, 19:12 | Сообщение № 3
Группа: Пользователи
Ранг: Прохожий
Сообщений: 7
Репутация: 0 ±
Замечаний: 20% ±

2019
Если кому-то пригодится, макрос запилил, для того же примера:

[vba]
Код
function test2() {
let ss = SpreadsheetApp.getActiveSpreadsheet();
let sheet = ss.getSheetByName("Лист1");

let findingRange = sheet.getRange("A:A").getValues()
let valToFind = 1;

let row;
for(let i = 0; i<findingRange.length;i++){
if(findingRange[i].indexOf(valToFind)!== -1){
row = i+1;
//let znach = sheet.getRange(row,2).getValue();
sheet.getRange(row,2).setValue(sheet.getRange(row,2).getValue());
continue;
}
}
}
[/vba]
 
Ответить
СообщениеЕсли кому-то пригодится, макрос запилил, для того же примера:

[vba]
Код
function test2() {
let ss = SpreadsheetApp.getActiveSpreadsheet();
let sheet = ss.getSheetByName("Лист1");

let findingRange = sheet.getRange("A:A").getValues()
let valToFind = 1;

let row;
for(let i = 0; i<findingRange.length;i++){
if(findingRange[i].indexOf(valToFind)!== -1){
row = i+1;
//let znach = sheet.getRange(row,2).getValue();
sheet.getRange(row,2).setValue(sheet.getRange(row,2).getValue());
continue;
}
}
}
[/vba]

Автор - ГорЫнЫ4
Дата добавления - 20.09.2023 в 19:12
ГорЫнЫ4 Дата: Среда, 20.09.2023, 19:41 | Сообщение № 4
Группа: Пользователи
Ранг: Прохожий
Сообщений: 7
Репутация: 0 ±
Замечаний: 20% ±

2019
немного усложним задачу - чтобы макрос заменял формулы на значения во всех столбцах, у которых в заголовке стоит цифра 2 (ну и остается то же условие чтобы в 1 строке была цифра 1)
Подскажет может кто?))))
теоретически можно перебрать сначала столбцы, если найти столбец, то внутри этой процедуры запустить процедуру по строкам. Вот что у меня получается. Но ничего не работает(( то ли столбец не правильно ищу
[vba]
Код
function test3() {
  let ss = SpreadsheetApp.getActiveSpreadsheet();
  let sheet = ss.getSheetByName("Лист1");

  let stolbec_dat = sheet.getRange("A:A").getValues()
  let stroca_zagolovkov = sheet.getRange("1:1").getValues()
  let poizk_daty = 1;
  let poisk_prodazh = 2;

  let nyzhnaya_stroka;
  let nyzhny_stolbec;
  for(let s = 0; s<stroca_zagolovkov.length;s++){
    if(stroca_zagolovkov[s].indexOf(poisk_prodazh)!== -1){
      nyzhny_stolbec = s+1;

      for(let i = 0; i<stolbec_dat.length;i++){
        if(stolbec_dat[i].indexOf(poizk_daty)!== -1){
          nyzhnaya_stroka = i+1;
          sheet.getRange(nyzhnaya_stroka,nyzhny_stolbec).setValue(sheet.getRange(nyzhnaya_stroka,nyzhny_stolbec).getValue());
        continue;
      }
    }
      continue;
    }
  }
    console.log(stroca_zagolovkov);
}
[/vba]


Сообщение отредактировал ГорЫнЫ4 - Среда, 20.09.2023, 20:17
 
Ответить
Сообщениенемного усложним задачу - чтобы макрос заменял формулы на значения во всех столбцах, у которых в заголовке стоит цифра 2 (ну и остается то же условие чтобы в 1 строке была цифра 1)
Подскажет может кто?))))
теоретически можно перебрать сначала столбцы, если найти столбец, то внутри этой процедуры запустить процедуру по строкам. Вот что у меня получается. Но ничего не работает(( то ли столбец не правильно ищу
[vba]
Код
function test3() {
  let ss = SpreadsheetApp.getActiveSpreadsheet();
  let sheet = ss.getSheetByName("Лист1");

  let stolbec_dat = sheet.getRange("A:A").getValues()
  let stroca_zagolovkov = sheet.getRange("1:1").getValues()
  let poizk_daty = 1;
  let poisk_prodazh = 2;

  let nyzhnaya_stroka;
  let nyzhny_stolbec;
  for(let s = 0; s<stroca_zagolovkov.length;s++){
    if(stroca_zagolovkov[s].indexOf(poisk_prodazh)!== -1){
      nyzhny_stolbec = s+1;

      for(let i = 0; i<stolbec_dat.length;i++){
        if(stolbec_dat[i].indexOf(poizk_daty)!== -1){
          nyzhnaya_stroka = i+1;
          sheet.getRange(nyzhnaya_stroka,nyzhny_stolbec).setValue(sheet.getRange(nyzhnaya_stroka,nyzhny_stolbec).getValue());
        continue;
      }
    }
      continue;
    }
  }
    console.log(stroca_zagolovkov);
}
[/vba]

Автор - ГорЫнЫ4
Дата добавления - 20.09.2023 в 19:41
Gustav Дата: Четверг, 21.09.2023, 12:09 | Сообщение № 5
Группа: Админы
Ранг: Участник клуба
Сообщений: 2808
Репутация: 1184 ±
Замечаний: ±

начинал с Excel 4.0, видел 2.1
На самом деле всё проще. Попробуйте так:
[vba]
Код
function test3m() {
var ss = SpreadsheetApp.getActive();
var sheet = ss.getSheetByName("Лист1");
var range = sheet.getDataRange();
var values = range.getValues();
for (var i = 1; i < values.length; i++) {
    if (values[i][0] == 1) {
        for (var j = 1; j < values[0].length; j++) {
            if (values[0][j] == 2) {
                range.getCell(i + 1, j + 1).setValue(values[i][j]);
            }
        }
    }
}
[/vba]


МОИ: Ник, Tip box: 41001663842605
 
Ответить
СообщениеНа самом деле всё проще. Попробуйте так:
[vba]
Код
function test3m() {
var ss = SpreadsheetApp.getActive();
var sheet = ss.getSheetByName("Лист1");
var range = sheet.getDataRange();
var values = range.getValues();
for (var i = 1; i < values.length; i++) {
    if (values[i][0] == 1) {
        for (var j = 1; j < values[0].length; j++) {
            if (values[0][j] == 2) {
                range.getCell(i + 1, j + 1).setValue(values[i][j]);
            }
        }
    }
}
[/vba]

Автор - Gustav
Дата добавления - 21.09.2023 в 12:09
ГорЫнЫ4 Дата: Понедельник, 25.09.2023, 11:40 | Сообщение № 6
Группа: Пользователи
Ранг: Прохожий
Сообщений: 7
Репутация: 0 ±
Замечаний: 20% ±

2019
На самом деле всё проще. Попробуйте так:

Благодарю!
 
Ответить
Сообщение
На самом деле всё проще. Попробуйте так:

Благодарю!

Автор - ГорЫнЫ4
Дата добавления - 25.09.2023 в 11:40
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!